vue事件監聽函式on中的this指標域
阿新 • • 發佈:2018-11-02
使用eventBus在兩個元件A,B之間通訊:
//定義全域性eventBus用於事件傳遞
var bus = new Vue();
//A元件
var A = Vue.component({
...
data:{
dataA:1,
},
//在鉤子函式中將監聽_event事件
created:function(){
var this_com = this;
bus.$on('_event', function(value){
this_com.dataA = value;
})
},
...
})
//B元件
var B = Vue.component ({
...
data:{
dataB = 2;
},
methods:{
changeA:function(){
//觸發事件_event
bus.$emit('_event', this.dataB);
},
},
template:`
<div v-bind:click="this.changeA"></div>
`
})
可以看到,在元件A監聽事件_event事件的函式前需要提前儲存this指標為this_com,因為在監聽函式中的this不再指向A元件本身,而是指向事件監聽者bus。
另一種方案是用箭頭函式代替事件監聽函式,因為箭頭函式可以將指標域繫結到當前元件
var A = Vue.component({
...
data:{
dataA:1,
},
//在鉤子函式中將監聽_event事件
created:function(){
var this_com = this;
bus.$on('_event', value=>{
this_com.dataA = value;
})
},
...
})