码迷,mamicode.com
首页 > 其他好文 > 详细

vue2.0 broadcast和dispatch的理解

时间:2017-06-05 00:33:07      阅读:109      评论:0      收藏:0      [点我收藏+]

标签:log   method   ons   ast   str   methods   add   content   bsp   

阅读目录

vue2 broadcast和dispatch的理解

/*
 broadcast 事件广播
 @param {componentName} 组件名称
 @param {eventName} 事件名
 @param {params} 参数
 遍历寻找所有子孙组件,假如子孙组件和componentName组件名称相同的话,则触发$emit的事件方法,数据为 params.
 如果没有找到 则使用递归的方式 继续查找孙组件,直到找到为止,否则继续递归查找,直到找到最后一个都没有找到为止。 
 */
function broadcast(componentName, eventName, params) {
  this.$children.forEach(child => {
    const name = child.$options.name;
    if (name === componentName) {
      child.$emit.apply(child, [eventName].concat(params));
    } else {
      broadcast.apply(child, [componentName, eventName].concat([params]));
    }
  })
}
/* 
 * dispatch 查找所有父级,直到找到要找到的父组件,并在身上触发指定的事件。
 @param { componentName } 组件名称
 @param { eventName } 事件名
 @param { params } 参数
 */
export default {
  methods: {
    dispatch(componentName, eventName, params) {
      let parent = this.$parent || this.$root;
      let name = parent.$options.name;

      while (parent && (!name || name !== componentName)) {
        parent = parent.$parent;

        if (parent) {
          name = parent.$options.name;
        }
      }
      if (parent) {
        parent.$emit.apply(parent, [eventName].concat(params));
      }
    },
    broadcast(componentName, eventName, params) {
      broadcast.call(this, componentName, eventName, params);
    }
  }
};

 

vue2.0 broadcast和dispatch的理解

标签:log   method   ons   ast   str   methods   add   content   bsp   

原文地址:http://www.cnblogs.com/tugenhua0707/p/6942490.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!