vue组件通信
程序员文章站
2022-03-05 07:53:05
...
Vue.prototype.$dispatch = function(eventName, data) {
let parent = this.$parent;
// 查找父元素
while (parent) {
if (parent) {
// 父元素用$emit触发
parent.$emit(eventName, data);
// 递归查找父元素
parent = parent.$parent;
} else {
break;
}
}
};
Vue.prototype.$boardcast = function(eventName, data) {
boardcast.call(this, eventName, data);
};
function boardcast(eventName, data) {
this.$children.forEach(child => {
// 子元素触发$emit
child.$emit(eventName, data);
if (child.$children.length) {
// 递归调用,通过call修改this指向 child
boardcast.call(child, eventName, data);
}
});
}