vue ElementUI中dispatch和broadcast事件派发(通过mixin引入使用)

function broadcast(componentName, eventName, params) {
  this.$children.forEach(child => {
  var name = child.$options.componentName;
  if (name === componentName) {
    child.$emit.apply(child, [eventName].concat(params));
  } else {
    broadcast.apply(child, [componentName, eventName].concat([params]));
  }
});
}
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);
  }
 }
};

 

 

posted @ 2021-07-20 12:28  吃饭七分饱  阅读(234)  评论(0编辑  收藏  举报