From 9a2f6897c7ca7b5862f76a4986ba6981bf1ad19b Mon Sep 17 00:00:00 2001 From: Jikkai Xiao Date: Tue, 22 May 2018 17:47:05 +0800 Subject: [PATCH] Checkbox: support validation for single checkbox. Closes #5787 (#11271) --- packages/checkbox/src/checkbox.vue | 6 ++++ test/unit/specs/form.spec.js | 52 ++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+) diff --git a/packages/checkbox/src/checkbox.vue b/packages/checkbox/src/checkbox.vue index 372bde2e9..f30f4b2d6 100644 --- a/packages/checkbox/src/checkbox.vue +++ b/packages/checkbox/src/checkbox.vue @@ -204,6 +204,12 @@ if (this.indeterminate) { this.$el.setAttribute('aria-controls', this.controls); } + }, + + watch: { + value(value) { + this.dispatch('ElFormItem', 'el.form.change', value); + } } }; diff --git a/test/unit/specs/form.spec.js b/test/unit/specs/form.spec.js index 452adeda1..d22b46e0c 100644 --- a/test/unit/specs/form.spec.js +++ b/test/unit/specs/form.spec.js @@ -476,6 +476,58 @@ describe('Form', () => { }, DELAY); }); }); + it('checkbox', done => { + vm = createVue({ + template: ` + + + + 接受协议 + + + + `, + data() { + return { + form: { + accept: true + }, + rules: { + accept: [ + { + validator: (rule, value, callback) => { + value ? callback() : callback(new Error('您需要接受用户协议')); + }, + trigger: 'change' + } + ] + } + }; + }, + methods: { + setValue(value) { + this.form.accept = value; + } + } + }, true); + vm.form.accept = false; + vm.$nextTick(_ => { + expect(vm.$refs.field.validateMessage).to.equal('您需要接受用户协议'); + }); + vm.$refs.form.validate(valid => { + let field = vm.$refs.field; + expect(valid).to.not.true; + expect(field.validateMessage).to.equal('您需要接受用户协议'); + vm.$refs.form.$nextTick(_ => { + vm.setValue(true); + + vm.$refs.form.$nextTick(_ => { + expect(field.validateMessage).to.equal(''); + done(); + }); + }); + }); + }); it('checkbox group', done => { vm = createVue({ template: `