Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | /** * @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); } } }; |