当前位置: 首页 > news >正文

巴中微网站建设市场营销七大策略

巴中微网站建设,市场营销七大策略,代理建设网站,国家建设部人才交流中心网站问题&#xff1a; 父组件弹窗调用子组件时&#xff0c;无法通过ref、provide、inject等方法调用子组件的方法 场景&#xff1a; <!-- 新增/编辑弹窗 --> <el-dialog style"width: auto;" v-model"dataSourceVisible" :title"$t(isEdit ?…

问题:

父组件弹窗调用子组件时,无法通过ref、provide、inject等方法调用子组件的方法

场景:

<!-- 新增/编辑弹窗 -->
<el-dialog style="width: auto;" v-model="dataSourceVisible" :title="$t(isEdit ? 'dataSource.editDataSource' : 'dataSource.addDataSource')" @close="handleClose"><component :is="DataSource" ref="dataSourceRef" :OBJECT_GUID="OBJECT_GUID" :PARENT_PATH="PARENT_PATH" @close="handleClose" :showPerformance="showPerformanceList" />
</el-dialog>

需求是在点击弹窗右上角的关闭按钮时,需要清空组件里面的表单验证。但是无法通过ref、provide、inject等方法调用子组件的方法。

失败分析:

父组件无法通过ref等方式调用子组件的方法,主要原因包括子组件尚未创建完成、子组件方法未声明、父组件调用时机不正确等‌。弹窗里面的子组件内容确实是动态渲染的组件,有可能即使父组件弹窗出来了,弹窗内容还没渲染出来,从而导致父子组件无法通信。

解决方法:

方法1:

子组件对外暴露方法clearDialogValidate,父组件通过ref调用子组件clearDialogValidate方法(不推荐

defineExpose({clearDialogValidate
});

不是说不能通过ref调用子组件实例吗?但是,

使用 v-if 来控制子组件的渲染,确保在调用方法时子组件已经挂载;然后使用 nextTicksetTimeout 来延迟调用子组件的方法,确保子组件已经挂载。

<!-- 新增/编辑弹窗 -->
<el-dialog style="width: auto;" v-model="dataSourceVisible" :title="$t(isEdit ? 'dataSource.editDataSource' : 'dataSource.addDataSource')" @close="handleClose"><component :is="DataSource" v-if="dataSourceVisible" v-model="dataSourceVisible" ref="dataSourceRef" :OBJECT_GUID="OBJECT_GUID" :PARENT_PATH="PARENT_PATH" @close="handleClose" :showPerformance="showPerformanceList" />
</el-dialog>
const dataSourceRef = ref(null);
// 关闭新增/编辑数据弹窗
const handleClose = () => {setTimeout(() => {if (dataSourceRef?.value?.componentRef?.value &&typeof dataSourceRef.value.componentRef.value.clearDialogValidate === 'function') {dataSourceRef.value.componentRef.value.clearDialogValidate();}}, 0); // 延迟 100ms 或 0 ms都可以,给子组件足够的时间挂载OBJECT_GUID.value = '';requestDataSource();showPerformanceList.value = false;dataSourceVisible.value = false;
}

这样就可以点击右上角关闭按钮时调用子组件的clearDialogValidate去清空校验了。但是会使组件内的clearValidate方法报错。所以行不通。

// 清空表单校验
const clearDialogValidate = () => {setTimeout(() => {proxy.$refs["dataSourceRuleForm"].clearValidate();}, 0);
};

方法2:

 父组件弹窗关闭时销毁子组件(调用官方API:destroy-on-close),然后子组件在挂载成功时,清空一下表单校验即可。

在el-dialog里写上destroy-on-close (在关闭弹窗时销毁子组件内容)

<!-- 新增/编辑数据链接弹窗 -->
<el-dialog style="width: auto;" v-model="dataSourceVisible" :title="$t(isEdit ? 'dataSource.editDataSource' : 'dataSource.addDataSource')" @close="handleClose" destroy-on-close><component :is="DataSource" :OBJECT_GUID="OBJECT_GUID" :PARENT_PATH="PARENT_PATH" @close="handleClose" :showPerformance="showPerformanceList" />
</el-dialog>

子组件:

在子组件onMounted挂载时调用clearDialogValidate();清空一下校验即可。

onMounted(() => {showPerformanceList.value = props.showPerformance......clearDialogValidate();
});
// 清空表单校验
const clearDialogValidate = () => {setTimeout(() => {proxy.$refs["dataSourceRuleForm"].clearValidate();}, 0);
};

 总结:

方法2简单有效。

http://www.dtcms.com/a/531308.html

相关文章:

  • 徐州服饰网站建设打开网站说建设中是什么问题?
  • 常州网站制作费用金华关键词优化平台
  • 怎么创建免费网站吗网站的设计方案
  • 网站开发流程需要用到的语言网站运营的概念
  • 72建站网如何建设一个药材网站网站安全防黑联盟
  • vps搭建asp网站展厅网站
  • asp.net网站开发文档廊坊企业网站团队
  • 重庆家政公司网站建设网站分析案例
  • 魔方网站导航设计付费推广网站
  • 摄影网站建设需求分析百度免费云服务器
  • 微信公众号怎么做网站的编写软件的步骤
  • 视频嵌入网站ps高手教学网站
  • 输入网站域名宁波教育学会网站建设
  • 温州企业网站开发wordpress 社区 插件
  • 网站建设成都市网站开发入门习题
  • 与建设通相关的网站百度推广官网
  • 如何做cpa单页网站赣州新闻综合频道回放
  • wordpress门户站新媒体营销
  • 大连企业建站系统模板wp网站打开太慢怎么做优化
  • 网站报价凯里有哪些网站开发公司
  • 网站建设朋友圈怎么写wordpress前台资料
  • 兰州商城网站建城市生活网官方网站app
  • 兖州网站建设手机网站打开微信支付功能
  • 9个广州seo推广神技河南seo公司
  • 企业建设网站需注意哪些事项网站开发工程师职责
  • 网站引流怎么做的免费制作网站平台
  • 长沙网站建设方案广州公司注册核名
  • 西部数据网站助手俄罗斯军事基地
  • 哪个网站专题做的好桦南县建设局网站
  • pc网站建设怎么样做网站需要多钱