Skip to content

Commit a821faf

Browse files
Jinjiangyyx990803
authored andcommitted
fixed Vue.delete(vm, key) (#2731)
* fixed Vue.delete(vm, key) bug * rollback to es5 syntax in test case
1 parent 3ec4603 commit a821faf

File tree

2 files changed

+23
-0
lines changed

2 files changed

+23
-0
lines changed

src/util/lang.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,10 @@ export function del (obj, key) {
5050
delete obj[key]
5151
var ob = obj.__ob__
5252
if (!ob) {
53+
if (obj._isVue) {
54+
delete obj._data[key]
55+
obj._digest()
56+
}
5357
return
5458
}
5559
ob.dep.notify()

test/unit/specs/observer/observer_spec.js

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -286,6 +286,25 @@ describe('Observer', function () {
286286
expect(dep3.notify.calls.count()).toBe(2)
287287
})
288288

289+
it('observing set/delete in Vm object', function (done) {
290+
var el = document.createElement('div')
291+
var vm = new Vue({
292+
el: el,
293+
template: '<div>{{a}}</div>',
294+
data: { a: 1 }
295+
})
296+
expect(el.innerHTML).toBe('<div>1</div>')
297+
Vue.set(vm, 'a', 2)
298+
Vue.nextTick(function () {
299+
expect(el.innerHTML).toBe('<div>2</div>')
300+
Vue.delete(vm, 'a')
301+
Vue.nextTick(function () {
302+
expect(el.innerHTML).toBe('<div></div>')
303+
done()
304+
})
305+
})
306+
})
307+
289308
it('observing array mutation', function () {
290309
var arr = []
291310
var ob = observe(arr)

0 commit comments

Comments
 (0)