问题背景:
自定义实现一个broadcast函数
-
作用:事件广播
-
实现思路:逐级遍历子组件,匹配组件名称,若匹配到则在该组件上触发对应的事件,否则继续往下遍历子组件
-
问题:复用boradcast函数,通过call修改上下文为当前子组件,发现修改无效,导致死循环
export default {
methods: {
broadcast (componentName, eventName, params) {
const children = this.$children
if (children) {
children.forEach(child => {
const name = child.$options.name
if (name === componentName) {
// 组件名称匹配则触发事件
child.$emit(eventName, params)
} else {
// 不匹配则继续往下遍历
this.broadcast.call(child, componentName, eventName, params)
}
})
}
}
}
}