详解vue之自行实现派发与广播(dispatch与broadcast)
网络编程 2021-07-04 14:07www.168986.cn编程入门
这篇文章主要介绍了详解vue之自行实现派发与广播(dispatch与broadcast),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们狼蚁网站SEO优化随着长沙网络推广来一起学习学习吧
要解决的问题
主要针对组件之间的跨级通信
为什么要自己实现dispatch与broadcast?
因为在做独立组件开发或库时,最好是不依赖第三方库
为什么不使用provide与inject?
因为它的使用场景,主要是子组件获取上级组件的状态,跨级组件间建立了一种主动提供与依赖注入的关系。
然后有两种场景它不能很好的解决
父组件向子组件(支持跨级)传递数据;
子组件向父组件(支持跨级)传递数据。
代码如下
emitter.js
function broadcast(ponentName, eventName, params) { this.$children.forEach(child => { const name = child.$options.name; if (name === ponentName) { child.$emit.apply(child, [eventName].concat(params)); } else { // todo 如果 params 是空数组,接收到的会是 undefined broadcast.apply(child, [ponentName, eventName].concat([params])); } }); } export default { methods: { dispatch(ponentName, eventName, params) { let parent = this.$parent || this.$root; let name = parent.$options.name; while (parent && (!name || name !== ponentName)) { parent = parent.$parent; if (parent) { name = parent.$options.name; } } if (parent) { parent.$emit.apply(parent, [eventName].concat(params)); } }, broadcast(ponentName, eventName, params) { broadcast.call(this, ponentName, eventName, params); } } };
parent.vue
<template> <div> <h1>我是父组件</h1> <button @click="handleClick">触发事件</button> <child /> </div> </template> <script> import Emitter from "@/mixins/emitter.js"; import Child from "./child"; export default { name: "ponentA", mixins: [Emitter], created() { this.$on("child-to-p", this.handleChild); }, methods: { handleClick() { this.broadcast("ponentB", "on-message", "Hello Vue.js"); }, handleChild(val) { alert(val); } }, ponents: { Child } }; </script>
child.vue
<template> <div>我是子组件</div> </template> <script> import Emitter from "@/mixins/emitter.js"; export default { name: "ponentB", mixins: [Emitter], created() { this.$on("on-message", this.showMessage); this.dispatch("ponentA", "child-to-p", "hello parent"); }, methods: { showMessage(text) { window.alert(text); } } }; </script>
这样就能实现跨级组件自定义通信了,,要注意其中一个问题订阅必须先于发布,也就是说先有on再有emit
父子组件渲染顺序,实例创建顺序
子组件先于父组件前渲染,所以在子组的mounted派发事件时,在父组件中的mounte中是监听不到的。
而父组件的create是先于子组件的,所以可以在父组件中的create可以监听到
到此这篇关于详解vue之自行实现派发与广播(dispatch与broadcast)的文章就介绍到这了,更多相关vue 派发与广播内容请搜索狼蚁SEO以前的文章或继续浏览狼蚁网站SEO优化的相关文章希望大家以后多多支持狼蚁SEO!
上一篇:浅析JavaScript中的事件委托机制跟深浅拷贝
下一篇:js实现电灯开关效果
编程语言
- 宿迁百度关键词排名指南:实现精准营销的关键
- 四川SEO优化怎么做网络推广
- 立昂技术备案老域名收购:如何为您的业务赋能
- 安徽百度关键词seo贵不贵,一般需要多少钱
- 吉林百度快照排名怎么做电话营销
- 多伦新手做SEO怎么做
- 甘肃优化关键词排名推广怎么做论坛营销
- 沙雅SEO网站推广:提升您的在线可见性
- 四川SEO优化如何提升销售额和销售量
- 聂荣网站排名优化:提升网站可见性的全方位指
- 涞水SEO:提升地方企业在线可见性的策略
- 辽宁百度seo排名怎样做网站排名
- 临湘哪有关键词排名优化:提升网站可见度的关
- 黑龙江百度网站优化有没有优惠
- 凉城优化关键词排名推广:提升您的网络可见性
- 萝北整站优化:提升您网站流量和排名的全面指