触发Dialog中子组件方法,找不到方法问题

触发Dialog中子组件方法,找不到方法问题

问题来源

在做项目的时候我在父组件中放置一个dialog,dialog中又存放了子组件,当打开dialog的时候同时触发子组件中的方法,但是就在这个时候,它报了一个找不到子组件中方法的错误

问题原因

是因为DOM元素还没有渲染完成导致的,当我们把dialog的visible属性设置为true的时候,子组件正在加载,这个对话框及其里边的DOM元素是有一个渲染的过程的,所以这个时候就可能拿不到里面的元素

解决方法

使用nextTick()方法

nextTick()方法的作用:将回调延迟到DOM 更新循环之后执行。在修改数据时立即使用它,然后等待 DOM 更新,便可达到获取 更新后的节点 的目的。简单来说就是当界面完全渲染完之后,在进行操作。

如果不了解nextTick方法的可以点击这个链接 : nextTick()用法总结

我的解决方法:

<--! 在vue界面的watch属性中监控 dialogFormVisible 属性,放它发生改变时 界面打开dialog进行渲染,这个时候想拿到渲染完成之后的initParamHtmlSS方法,所以就把调用子组件方法写在this.$nextTick的回调函数里,而this.$nextTick回调函数是界面完全渲染完成以后调用,这样就一定能拿到子组件中的方法 -->
watch: {
    dialogFormVisible(value) {
      this.$nextTick(function() {
        if (value) {
		<--!这是我要调用子组件中的方法-->
          this.$refs.paramDrawRef.initParamHtmlSS() // 前后加遮罩
        }
      })
    }
  }
posted @ 2020-11-03 17:11  长得黑的程序员  阅读(570)  评论(0编辑  收藏  举报