VUE2 父组件怎么向子组件广播事件 ?$broadcast还能用吗?
可以通过子组件的$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”事件好一些?
10 回答11.7k 阅读
2 回答3.2k 阅读✓ 已解决
4 回答4.6k 阅读✓ 已解决
3 回答1.7k 阅读✓ 已解决
4 回答2.1k 阅读✓ 已解决
5 回答819 阅读
4 回答2.2k 阅读✓ 已解决
$broadcast已经废弃了
凡是事件都可以用新的事件系统($on(eventName) & $emit(eventName))来代替
官方同时推荐使用vuex之类应用状态管理方案
但如果只是父子间需要经由事件触发通信
完全可以在父组件的事件回调中用refs调用子组件的方法