From 4305f423a1e0f6ad167bbf432fadaa7f174de495 Mon Sep 17 00:00:00 2001 From: Eduardo San Martin Morote Date: Sun, 9 Apr 2017 17:39:10 +0200 Subject: [PATCH] Use genAssignmentCode in chehckbox model web compiler Fix #5398 --- .../web/compiler/directives/model.js | 2 +- .../directives/model-checkbox.spec.js | 25 +++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/platforms/web/compiler/directives/model.js b/src/platforms/web/compiler/directives/model.js index 98c7e2eab5a..84e3dd46a38 100644 --- a/src/platforms/web/compiler/directives/model.js +++ b/src/platforms/web/compiler/directives/model.js @@ -91,7 +91,7 @@ function genCheckboxModel ( '$$i=_i($$a,$$v);' + `if($$c){$$i<0&&(${value}=$$a.concat($$v))}` + `else{$$i>-1&&(${value}=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}` + - `}else{${value}=$$c}`, + `}else{${genAssignmentCode(value, '$$c')}}`, null, true ) } diff --git a/test/unit/features/directives/model-checkbox.spec.js b/test/unit/features/directives/model-checkbox.spec.js index 0236598bb6b..09d98773b3a 100644 --- a/test/unit/features/directives/model-checkbox.spec.js +++ b/test/unit/features/directives/model-checkbox.spec.js @@ -256,4 +256,29 @@ describe('Directive v-model checkbox', () => { expect(vm.$el.checked).toBe(true) }).then(done) }) + + it('triggers a watcher when binding to an array value in a checkbox', done => { + const vm = new Vue({ + data: { + test: { + thing: false, + arr: [true] + } + }, + template: ` +
+ + {{ test.arr[0] }} +
+ ` + }).$mount() + document.body.appendChild(vm.$el) + expect(vm.$el.children[0].checked).toBe(true) + expect(vm.$el.children[1].textContent).toBe('true') + vm.$el.children[0].click() + expect(vm.$el.children[0].checked).toBe(false) + waitForUpdate(() => { + expect(vm.$el.children[1].textContent).toBe('false') + }).then(done) + }) })