vue兄弟组件之间的传值以及避免自定义事件被触发多次

1.在test.vue中引入A和B组建

<style lang="scss" scoped>
	div {
		padding: 10px;
		margin-top: 10px;
		line-height: 1.3;
		box-sizing: border-box;
	}
</style>

<template>
	<div>
		<A></A>
		<B></B>
	</div>
</template>

<script>
	import A from '@/components/A.vue'
	import B from '@/components/B.vue'
	export default {
		components: {
			A,
			B
		},
		data() {
			return {

			};
		},
	};
</script>

2.在A组件中创建自定义printa事件

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped lang="scss">
.a {
  
}
</style>
<template>
  <div class="a">
  	<button @click="emita">a</button>
  </div>
</template>

<script>
import event from '@/assets/js/event.js';
export default {
	props: {
		
	},
    data() {
		return {
			
		}
	},
	created() {
		
	},
	methods:{
		emita(){
			event.$emit('printa','a')
		}
	}
}
</script>

3.在B组件中接收并触发printa事件

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped lang="scss">
.b {
  
}
</style>
<template>
  <div class="b">
  	b
  </div>
</template>

<script>
import event from '@/assets/js/event.js';
export default {
	props: {
		
	},
    data() {
		return {
			
		}
	},
	mounted() {
		event.$off('printa') // 阻止printa事件被触发多次
		event.$on('printa',this.print) // 绑定
	},
	methods:{
		print(val){
			console.log('val',val);
		}
	},
	beforeDestroy() {
		console.log('beforeDestroy print');
		event.$off('printa',this.print) // 记得要及时解绑,否则可能会造成内存泄漏
	}
}
</script>

为了防止自定义事件被触发多次,记得在 o n 之 前 先 执 行 on之前先执行 onoff
4.event.js中的代码:

import Vue from 'vue'
export default new Vue()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值