// 暂不提供通知所有 // function broadcast (componentName, eventName, ...params) { // this.$children.forEach(child => { // const name = child.$options.name && child.$options.name.substr(1) // if (~componentName.indexOf(name)) { // child.$emit.apply(child, [eventName].concat(params)) // } else { // broadcast.apply(child, [componentName, eventName].concat([params])) // } // }) // } function broadcast (componentName, eventName, ...params) { const children = this.$children const len = children.length for (let i = 0; i < len; i++) { const child = children[i] const name = child.$options.name && child.$options.name.substr(4) if (~componentName.indexOf(name)) { child.$emit.apply(child, [eventName].concat(params)) return false } else { if (broadcast.apply(child, [componentName, eventName].concat([params])) === false) { return false } } } } export default { methods: { $dispatch (componentName, eventName, ...params) { if (typeof componentName === 'string') { componentName = [componentName] } let parent = this.$parent || this.$root let name = parent.$options.name && parent.$options.name.substr(4) while (parent && (!name || !~componentName.indexOf(name))) { parent = parent.$parent if (parent) { name = parent.$options.name && parent.$options.name.substr(4) } } if (parent) { parent.$emit.apply(parent, [eventName].concat(params)) } }, $broadcast (componentName, eventName, ...params) { if (typeof componentName === 'string') { componentName = [componentName] } broadcast.apply(this, [componentName, eventName].concat(params)) } } }