Parcourir la source

refactor v-repeat alias/meta logic

Evan You il y a 11 ans
Parent
commit
4b20ad6ea9
2 fichiers modifiés avec 9 ajouts et 7 suppressions
  1. 8 6
      src/directives/repeat.js
  2. 1 1
      test/unit/specs/directives/repeat_spec.js

+ 8 - 6
src/directives/repeat.js

@@ -268,20 +268,22 @@ module.exports = {
    */
 
   build: function (data, index, needCache) {
-    var original = data
     var meta = { $index: index }
     if (this.converted) {
-      meta.$key = original.$key
+      meta.$key = data.$key
     }
     var raw = this.converted ? data.$value : data
     var alias = this.arg
-    var hasAlias = !isObject(raw) || !isPlainObject(data) || alias
-    // wrap the raw data with alias
-    data = hasAlias ? {} : raw
     if (alias) {
+      data = {}
       data[alias] = raw
-    } else if (hasAlias) {
+    } else if (!isPlainObject(raw)) {
+      // non-object values
+      data = {}
       meta.$value = raw
+    } else {
+      // default
+      data = raw
     }
     // resolve constructor
     var Ctor = this.Ctor || this.resolveCtor(data, meta)

+ 1 - 1
test/unit/specs/directives/repeat_spec.js

@@ -256,7 +256,7 @@ if (_.inBrowser) {
           }
         },
         template: '<div v-repeat="listHash">{{$key}}' +
-            '<p v-repeat="$data">{{a}}</p>' +
+            '<p v-repeat="$value">{{a}}</p>' +
             '</div>'
       })
       function output(key){