1. 程式人生 > >vue事件監聽函式on中的this指標域

vue事件監聽函式on中的this指標域

使用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;
		})
	},
	
	...
})