UNPKG

@cgj/k-view

Version:
44 lines (41 loc) 1.26 kB
/** * @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); } } };