¶Ô±ÈÐÂÎļþ |
| | |
| | | /** |
| | | * éå½ä½¿ç¨ call æ¹å¼thisæå |
| | | * @param componentName // éè¦æ¾çç»ä»¶çåç§° |
| | | * @param eventName // äºä»¶åç§° |
| | | * @param params // éè¦ä¼ éçåæ° |
| | | */ |
| | | function broadcast(componentName, eventName, params) { |
| | | // 循ç¯åèç¹æ¾å°åç§°ä¸æ ·çåèç¹ å¦å éå½ å½ååèç¹ |
| | | this.$children.map((child) => { |
| | | if (componentName === child.$options.name) { |
| | | child.$emit.apply(child, [eventName].concat(params)) |
| | | } else { |
| | | broadcast.apply(child, [componentName, eventName].concat(params)) |
| | | } |
| | | }) |
| | | } |
| | | export default { |
| | | methods: { |
| | | /** |
| | | * æ´¾å (å䏿¥æ¾) (ä¸ä¸ª) |
| | | * @param componentName // éè¦æ¾çç»ä»¶çåç§° |
| | | * @param eventName // äºä»¶åç§° |
| | | * @param params // éè¦ä¼ éçåæ° |
| | | */ |
| | | dispatch(componentName, eventName, params) { |
| | | let parent = this.$parent || this.$root// $parent æ¾å°æè¿çç¶èç¹ $root æ ¹èç¹ |
| | | let { name } = parent.$options // è·åå½åç»ä»¶å®ä¾çname |
| | | // 妿å½åæèç¹ && å½å没åç§° ä¸ å½ååç§°çäºéè¦ä¼ è¿æ¥çåç§°çæ¶å就廿¥æ¾å½åçèç¹ |
| | | // 循ç¯åºå½ååç§°ç䏿 ·çç»ä»¶å®ä¾ |
| | | while (parent && (!name || name !== componentName)) { |
| | | parent = parent.$parent |
| | | if (parent) { |
| | | name = parent.$options.name |
| | | } |
| | | } |
| | | // æèç¹è¡¨ç¤ºå½åæ¾å°äºname䏿 ·çå®ä¾ |
| | | if (parent) { |
| | | parent.$emit.apply(parent, [eventName].concat(params)) |
| | | } |
| | | }, |
| | | /** |
| | | * 广æ (å䏿¥æ¾) (广æå¤ä¸ª) |
| | | * @param componentName // éè¦æ¾çç»ä»¶çåç§° |
| | | * @param eventName // äºä»¶åç§° |
| | | * @param params // éè¦ä¼ éçåæ° |
| | | */ |
| | | broadcast(componentName, eventName, params) { |
| | | broadcast.call(this, componentName, eventName, params) |
| | | } |
| | | } |
| | | } |