diff --git a/docs/examples-docs/badge.md b/docs/examples-docs/badge.md index c73d6a8e5..fee5fda1e 100644 --- a/docs/examples-docs/badge.md +++ b/docs/examples-docs/badge.md @@ -5,10 +5,10 @@ :::demo 样例代码 ```html - - - - + + + + ``` ::: \ No newline at end of file diff --git a/packages/badge/mixin/emitter.js b/packages/badge/mixin/emitter.js new file mode 100644 index 000000000..2e25c831f --- /dev/null +++ b/packages/badge/mixin/emitter.js @@ -0,0 +1,34 @@ +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); + } + } +}; diff --git a/packages/badge/src/badge-group.vue b/packages/badge/src/badge-group.vue index 1b928e828..231a60f9c 100644 --- a/packages/badge/src/badge-group.vue +++ b/packages/badge/src/badge-group.vue @@ -6,6 +6,11 @@ diff --git a/packages/badge/src/badge.vue b/packages/badge/src/badge.vue index e8df950ab..a21163aff 100644 --- a/packages/badge/src/badge.vue +++ b/packages/badge/src/badge.vue @@ -1,22 +1,41 @@