| function broadcast(componentName, eventName, params) { | 
|   this.$children.forEach(child => { | 
|     var name = child.$options.componentName; | 
|     if (!name) { | 
|       try { | 
|         name = | 
|           child.$el.attributes && | 
|           child.$el.attributes["name"] && | 
|           child.$el.attributes.name.value; | 
|       } catch (e) { | 
|         console.log(e.messsage); | 
|       } | 
|     } | 
|   | 
|     if (name === componentName) { | 
|       child.$emit.apply(child, [eventName].concat(params)); | 
|     } else { | 
|       broadcast.apply(child, [componentName, eventName].concat([params])); | 
|     } | 
|   }); | 
| } | 
|   | 
| // 查找组件 | 
| function findChild(componentName) { | 
|   var existChild = null; | 
|   this.$children.forEach(child => { | 
|     var name = child.$options.name || child.$options.componentName; | 
|     if (!name) { | 
|       try { | 
|         name = | 
|           child.$el.attributes && | 
|           child.$el.attributes["name"] && | 
|           child.$el.attributes.name.value; | 
|       } catch (e) { | 
|         console.log(e.messsage); | 
|       } | 
|     } | 
|   | 
|     if (name === componentName) { | 
|       existChild = child; | 
|       return false; | 
|     } else { | 
|       var _subExistsChild = findChild.apply(child, [componentName]); | 
|       if (_subExistsChild) { | 
|         existChild = _subExistsChild; | 
|       } | 
|     } | 
|   }); | 
|   | 
|   return existChild; | 
| } | 
| 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); | 
|     }, | 
|     findChild(componentName) { | 
|       var root = this.$root; | 
|       return findChild.call(root, componentName); | 
|     } | 
|   } | 
| }; |