From 7fe8472838a5d2676cedc788a632d2f08a8495ec Mon Sep 17 00:00:00 2001 From: Hanks Date: Thu, 19 Jan 2017 01:54:42 +0800 Subject: [PATCH 1/3] Support to delete array item in Vue.delete --- src/core/observer/index.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/core/observer/index.js b/src/core/observer/index.js index fe1d4614d71..1e5e914f69d 100644 --- a/src/core/observer/index.js +++ b/src/core/observer/index.js @@ -218,7 +218,11 @@ export function set (obj: Array | Object, key: any, val: any) { /** * Delete a property and trigger change if necessary. */ -export function del (obj: Object, key: string) { +export function del (obj: Array | Object, key: any) { + if (Array.isArray(obj)) { + obj.splice(key, 1) + return + } const ob = obj.__ob__ if (obj._isVue || (ob && ob.vmCount)) { process.env.NODE_ENV !== 'production' && warn( From 7afceb9b5c09abf45650b54af1e742a2f97223ad Mon Sep 17 00:00:00 2001 From: Hanks Date: Thu, 19 Jan 2017 02:16:35 +0800 Subject: [PATCH 2/3] add test case for Vue.delete array --- .../features/global-api/set-delete.spec.js | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/test/unit/features/global-api/set-delete.spec.js b/test/unit/features/global-api/set-delete.spec.js index 0e19f69395e..80bb5804cbb 100644 --- a/test/unit/features/global-api/set-delete.spec.js +++ b/test/unit/features/global-api/set-delete.spec.js @@ -72,5 +72,29 @@ describe('Global API: set/delete', () => { expect(vm.$el.innerHTML).toBe('') }).then(done) }) + it('be able to delete an item in array', done => { + const vm = new Vue({ + template: '

{{obj.name}}

', + data: { + lists: [ + { name: 'A' }, + { name: 'B' }, + { name: 'C' } + ] + } + }).$mount() + + expect(vm.$el.innerHTML).toBe('

A

B

C

') + Vue.delete(vm.lists, 1) + waitForUpdate(() => { + expect(vm.$el.innerHTML).toBe('

A

C

') + Vue.delete(vm.lists, 1) + }).then(() => { + expect(vm.$el.innerHTML).toBe('

A

') + Vue.delete(vm.lists, 0) + }).then(() => { + expect(vm.$el.innerHTML).toBe('') + }).then(done) + }) }) }) From 4e9633d09c7fc00648e51a953df8326a338e6a2d Mon Sep 17 00:00:00 2001 From: Hanks Date: Thu, 19 Jan 2017 23:05:16 +0800 Subject: [PATCH 3/3] add blank line between test cases --- test/unit/features/global-api/set-delete.spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/unit/features/global-api/set-delete.spec.js b/test/unit/features/global-api/set-delete.spec.js index 80bb5804cbb..7a20666b12a 100644 --- a/test/unit/features/global-api/set-delete.spec.js +++ b/test/unit/features/global-api/set-delete.spec.js @@ -72,6 +72,7 @@ describe('Global API: set/delete', () => { expect(vm.$el.innerHTML).toBe('') }).then(done) }) + it('be able to delete an item in array', done => { const vm = new Vue({ template: '

{{obj.name}}

', @@ -83,7 +84,6 @@ describe('Global API: set/delete', () => { ] } }).$mount() - expect(vm.$el.innerHTML).toBe('

A

B

C

') Vue.delete(vm.lists, 1) waitForUpdate(() => {