Jelajahi Sumber

fix :class binding array syntax cleanup (fix #1458)

Evan You 10 tahun lalu
induk
melakukan
329987cf0d

+ 2 - 2
src/directives/internal/class.js

@@ -36,7 +36,7 @@ module.exports = {
         addClass(this.el, value[i])
       }
     }
-    this.prevKeys = value
+    this.prevKeys = value.slice()
   },
 
   cleanup: function (value) {
@@ -44,7 +44,7 @@ module.exports = {
       var i = this.prevKeys.length
       while (i--) {
         var key = this.prevKeys[i]
-        if (!value || !contains(value, key)) {
+        if (key && (!value || !contains(value, key))) {
           removeClass(this.el, key)
         }
       }

+ 7 - 1
test/unit/specs/directives/internal/class_spec.js

@@ -47,8 +47,14 @@ if (_.inBrowser) {
       expect(el.className).toBe('a c d')
       dir.update()
       expect(el.className).toBe('a')
-      dir.update(['e', ''])
+      // test mutating array
+      var arr = ['e', '']
+      dir.update(arr)
       expect(el.className).toBe('a e')
+      arr.length = 0
+      arr.push('f')
+      dir.update(arr)
+      expect(el.className).toBe('a f')
     })
 
   })