diff --git a/src/instance/api/events.js b/src/instance/api/events.js index 2d2b4bdc7..54d0aa1f4 100644 --- a/src/instance/api/events.js +++ b/src/instance/api/events.js @@ -86,11 +86,12 @@ export default function (Vue) { * Trigger an event on self. * * @param {String} event + * @return {Boolean} shouldPropagate */ Vue.prototype.$emit = function (event) { var cbs = this._events[event] - this._shouldPropagate = !cbs + var shouldPropagate = !cbs if (cbs) { cbs = cbs.length > 1 ? toArray(cbs) @@ -99,11 +100,11 @@ export default function (Vue) { for (var i = 0, l = cbs.length; i < l; i++) { var res = cbs[i].apply(this, args) if (res === true) { - this._shouldPropagate = true + shouldPropagate = true } } } - return this + return shouldPropagate } /** @@ -120,8 +121,8 @@ export default function (Vue) { var children = this.$children for (var i = 0, l = children.length; i < l; i++) { var child = children[i] - child.$emit.apply(child, arguments) - if (child._shouldPropagate) { + var shouldPropagate = child.$emit.apply(child, arguments) + if (shouldPropagate) { child.$broadcast.apply(child, arguments) } } @@ -139,8 +140,8 @@ export default function (Vue) { this.$emit.apply(this, arguments) var parent = this.$parent while (parent) { - parent.$emit.apply(parent, arguments) - parent = parent._shouldPropagate + var shouldPropagate = parent.$emit.apply(parent, arguments) + parent = shouldPropagate ? parent.$parent : null } diff --git a/src/instance/internal/init.js b/src/instance/internal/init.js index 962339f5c..b986d8335 100644 --- a/src/instance/internal/init.js +++ b/src/instance/internal/init.js @@ -39,7 +39,6 @@ export default function (Vue) { // events bookkeeping this._events = {} // registered callbacks this._eventsCount = {} // for $broadcast optimization - this._shouldPropagate = false // for event propagation // fragment instance properties this._isFragment = false