fix event propagation check when chained emits (fix #1839)

This commit is contained in:
Evan You 2015-11-23 12:11:13 -05:00
parent 5fe6e55a10
commit 83f418ee8d
2 changed files with 8 additions and 8 deletions

View File

@ -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
}

View File

@ -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