使用方法:
vm.
e
m
i
t
(
"
事
件
名
(
比
如
c
l
i
c
k
,
i
n
p
u
t
等
事
件
,
这
个
不
是
函
数
名
)
"
,
形
参
)
:
触
发
当
前
实
例
上
的
事
件
。
附
加
参
数
都
会
传
给
监
听
器
回
调
。
−
−
−
−
发
布
v
m
.
emit( "事件名(比如click,input等事件,这个不是函数名)", 形参 ):触发当前实例上的事件。附加参数都会传给监听器回调。 ----发布 vm.
emit("事件名(比如click,input等事件,这个不是函数名)",形参):触发当前实例上的事件。附加参数都会传给监听器回调。−−−−发布vm.on( “事件名”, callback回调函数避免this问题,使用箭头函数()=>{} ) :监听当前实例上的自定义事件。事件可以由 vm.
e
m
i
t
触
发
。
回
调
函
数
会
接
收
所
有
传
入
事
件
触
发
函
数
的
额
外
参
数
。
−
−
−
−
−
订
阅
v
m
.
emit 触发。回调函数会接收所有传入事件触发函数的额外参数。 -----订阅 vm.
emit触发。回调函数会接收所有传入事件触发函数的额外参数。−−−−−订阅vm.root:当前组件树的根 Vue 实例。
- 在main入口js中设置一个bus总线
// 创建一个Vue实例
new Vue({
router,
store,
render: h => h(App),
data: {
// 空的实例放到根组件下,所有的子组件都能调用 "Bus总线" 订阅者发布者模式
Bus: new Vue()
}
}).$mount('#app');
2.发布
//获取被选中的班级
handleSelectionChange(vals) {
this.ids = vals.map((id) => id.classesId);
this.$root.Bus.$emit("myFun", this.ids);
console.log(this.ids);
},
3.订阅
mounted() {
this.$root.Bus.$on("myFun", (ids) => (this.ids = ids));
},
4.解析:每当 handleSelectionChange()函数执行,都会触发
e
m
i
t
(
"
m
y
F
u
n
"
,
t
h
i
s
.
i
d
s
)
;
emit("myFun", this.ids);
emit("myFun",this.ids);on(“myFun”, (ids)监听这个函数,并调用自己中的回调函数。
子组件:handleCurrentChange(val = 1) { this.$emit("handleCurrentChange", val); },
@handleCurrentChange="handleCurrentChange($event)"