Vue 父组件触发子组件事件

早期的 Jquery 编程主要是以事件驱动,Vue 则是直接数据驱动。因此在组件嵌套的时候,没有显示的提供,父组件控制子组件的触发事件。事件控制这一块被弱化了,但是父组件想控制子组件是不是就没有办法了呢?其实不然,Vue 提供了 ref 属性。这样也就可以触发子组件事件。

实例

使用 Element UI <el-upload> 做上传文件功能。这里有一个需求是,当我点击上传按钮时候,需要做一个校验。等校验通过后在执行上传功能。

-- 子组件(这里仅把标签写出来,做示例)
 <el-upload>
  <slot></slot>  
 </el-upload>

-- 父组件(<file-upload> 引入的子组件)
<file-upload ref="fileupload" >
        <el-button
          @click.stop="btnclick"
          :disabled="fileUploadDisabled"
          size="small"
          type="primary"
        >上传</el-button>
 </file-upload>

// 父组件 js 部分
export default {
  methods:{
        btnclick(){
             // 父组件触发子组件点击事件,触发上传功能
            this.$refs.fileupload.$refs.upload.$children[0].$el.click();
        }
    }
}

关键点

  • 给 <el-button> 增加点击事件,并且阻止事件传递。用@click.stop 控制。
  • 给<file-upload> 增加 ref 属性,这样可以直接控制子组件
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容