| function broadcast(componentName, eventName, params) { | 
|   this.$children.forEach(child => { | 
|     var name = child.$options.componentName; | 
|   | 
|     if (name === componentName) { | 
|       child.$emit.apply(child, [eventName].concat(params)); | 
|     } else { | 
|       broadcast.apply(child, [componentName, eventName].concat([params])); | 
|     } | 
|   }); | 
| } | 
| export default { | 
|   methods: { | 
|     dispatch(componentName, eventName, params) { | 
|       var parent = this.$parent || this.$root; | 
|       var name = parent.$options.componentName; | 
|   | 
|       while (parent && (!name || name !== componentName)) { | 
|         parent = parent.$parent; | 
|   | 
|         if (parent) { | 
|           name = parent.$options.componentName; | 
|         } | 
|       } | 
|       if (parent) { | 
|         parent.$emit.apply(parent, [eventName].concat(params)); | 
|       } | 
|     }, | 
|     broadcast(componentName, eventName, params) { | 
|       broadcast.call(this, componentName, eventName, params); | 
|     } | 
|   } | 
| }; |