VUE2 父组件怎么向子组件广播事件 ?$broadcast还能用吗?

VUE2 父组件怎么向子组件广播事件 ?$broadcast还能用吗?

阅读 14.8k
6 个回答

$broadcast已经废弃了
凡是事件都可以用新的事件系统($on(eventName) & $emit(eventName))来代替
官方同时推荐使用vuex之类应用状态管理方案

但如果只是父子间需要经由事件触发通信
完全可以在父组件的事件回调中用refs调用子组件的方法

可以通过子组件的$emit()通知父组件,父组件监听然后在作出操作,比如:

子组件:
this.$emit('loadData')

父组件:
<state @loadData="getItems"></state>

恩,大概就是这个样子了

可以用Bus啊~

// bus.js
import Vue from 'vue'
export default new Vue()
// Parent.vue
import Bus from '../bus'
...
export default{
    data(){
        return {
            getVal:''
        }
    },
    mounted(){
        Bus.$on(val=>{
            this.getVal = val
        })
    },
    watch:{
        getVal(val){
            if(val){
                //do something...
            }
        }
    }
}
// Child.js
import Bus from '../bus'
...
export default{
    data(){
        return {}
    },
    mounted(){
        Bus.$emit('getVal','balabalabala...')
    }

使用$refs直接调用
大概这样

子组件sub.vue
<template>
  <div>
  </div>
</template>

<script>
export default {
  name: 'sub',
  methods: {
    log() {
      console.log(1111111);
    },
  },
};
</script>

父组件 index.vue
<template>
  <div>
  <sub ref="aaa"></sub>
  </div>
</template>

<script>

import sub from '../components/sub';

export default {
  name: 'index',
  components: {
    sub,
  },
  mounted() {
    this.$refs.aaa.log();
  },
};
</script>

<style>
</style>

不知道作者出于什么目的把这功能删除了,实际上是有不少场景需要这个:
如:
子组件比较多,但同时要通过父组件调用一下子组件的重置(画面手输的项目),但又不确实子组件有几层,是不是用这种“broadcast”事件好一些?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题