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); } } };