2
0
Эх сурвалжийг харах

fixed Vue.delete(vm, key) (#2731)

* fixed Vue.delete(vm, key) bug

* rollback to es5 syntax in test case
Jinjiang 10 жил өмнө
parent
commit
a821faf294

+ 4 - 0
src/util/lang.js

@@ -50,6 +50,10 @@ export function del (obj, key) {
   delete obj[key]
   var ob = obj.__ob__
   if (!ob) {
+    if (obj._isVue) {
+      delete obj._data[key]
+      obj._digest()
+    }
     return
   }
   ob.dep.notify()

+ 19 - 0
test/unit/specs/observer/observer_spec.js

@@ -286,6 +286,25 @@ describe('Observer', function () {
     expect(dep3.notify.calls.count()).toBe(2)
   })
 
+  it('observing set/delete in Vm object', function (done) {
+    var el = document.createElement('div')
+    var vm = new Vue({
+      el: el,
+      template: '<div>{{a}}</div>',
+      data: { a: 1 }
+    })
+    expect(el.innerHTML).toBe('<div>1</div>')
+    Vue.set(vm, 'a', 2)
+    Vue.nextTick(function () {
+      expect(el.innerHTML).toBe('<div>2</div>')
+      Vue.delete(vm, 'a')
+      Vue.nextTick(function () {
+        expect(el.innerHTML).toBe('<div></div>')
+        done()
+      })
+    })
+  })
+
   it('observing array mutation', function () {
     var arr = []
     var ob = observe(arr)