vue父组件触发子组件方法

2018-03-10  本文已影响0人  神话降临

1.在父组件里面引入子组件,在子组件标签上加上 ref="自己定义",如下面定义的ref = 'ccc'
2.直接在需要触发子组件的方法内加上 this.refs.ccc.子组件方法 ,如下面的this.refs.ccc.test(param);
这个时候console.log(this.$refs.ccc)输出的是一个vue对象
如果输出的是 undefind
就需要这样写,因为我在子组件上加了一个v-if来判断子组件是否显示

      this.$nextTick(() => {
                     this.$refs.ccc.test('hello');
                  });

因为我在子组件上加了一个v-if来判断子组件是否显示
$nextTick在下次 DOM 更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法,获取更新后的 DOM。
dom更新机制,vue是数据驱动视图即数据改变后,dom就会更新,但是要注意的是并不是修改数据的当下,视图会立即跟新,而是等同一事件循环中的所有数据变化完成之后,再统一进行视图更新。
父组件

<template>
   <div>
    //子组件
     <vChild  v-if="flag"
                   ref="ccc"></vChild>
  </div>
</template>

  <script>
   import vChild form './child.vue'
     export default{
            data(){
                   return{}
            },
        components:{
           vChild
        },
      
         methods:{
                gogo(){
                 this.$nextTick(() => {
                     this.$refs.ccc.test('hello');
                  });
              }
             }
        }
  </script>

子组件 child.vue

   <template>
   <div>
    //子组件
     <vChild  v-if="flag"></vChild>
  </div>
</template>

  <script>
     export default{
            data(){
                   return{}
            },
         methods:{
                test(val){
                    console.log(val);
                     //do someThing
                 }
             }
        }
  </script>
上一篇下一篇

猜你喜欢

热点阅读