diff --git a/src/util/lang.js b/src/util/lang.js index e53e9869434..29e450fa5a2 100644 --- a/src/util/lang.js +++ b/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() diff --git a/test/unit/specs/observer/observer_spec.js b/test/unit/specs/observer/observer_spec.js index b4ed2f9b6fb..ea9ade50aae 100644 --- a/test/unit/specs/observer/observer_spec.js +++ b/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: '
{{a}}
', + data: { a: 1 } + }) + expect(el.innerHTML).toBe('
1
') + Vue.set(vm, 'a', 2) + Vue.nextTick(function () { + expect(el.innerHTML).toBe('
2
') + Vue.delete(vm, 'a') + Vue.nextTick(function () { + expect(el.innerHTML).toBe('
') + done() + }) + }) + }) + it('observing array mutation', function () { var arr = [] var ob = observe(arr)