@cgj/k-view
Version:
``` npm i @cgj/k-view ```
44 lines (41 loc) • 1.26 kB
JavaScript
/**
* @description 跨组件通信库
* @author SoldierAb
* @since 18-12-28
* @example
*
* child.vue:
* this.dispatch('parent',eventName,params);
*
* parant.vue
* this.$on(eventName,params=>{
*
* });
*/
const broadcast = (componentName, eventName, params) => {
this.$children.forEach(child => {
const name = child.$options.name;
if (name === componentName) {
child.$emit.apply(child, [eventName].concat(params));
} else {
//如果 params 是空数组,接收到的会是 undefined
broadcast.apply(child, [componentName, eventName].concat([params]));
}
});
}
export default {
methods: {
dispatch(componentName, eventName, params) {
let parent = this.$parent || this.$root;
let name = parent.$options.name;
while (parent && (!name || name !== componentName)) {
parent = parent.$parent;
if (parent) name = parent.$options.name;
}
if (parent) parent.$emit.apply(parent, [eventName].concat(params));
},
broadcast(componentName, eventName, params) {
broadcast.call(this, componentName, eventName, params);
}
}
};