Просмотр исходного кода

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

Evan You 10 лет назад
Родитель
Сommit
83f418ee8d
2 измененных файлов с 8 добавлено и 8 удалено
  1. 8 7
      src/instance/api/events.js
  2. 0 1
      src/instance/internal/init.js

+ 8 - 7
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
     }

+ 0 - 1
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