From 8907a9990c4af37856da9d0aec7a59ceee384b74 Mon Sep 17 00:00:00 2001 From: tanjinzhou <415800467@qq.com> Date: Fri, 14 Aug 2020 18:11:30 +0800 Subject: [PATCH] fix: form trigger --- antdv-demo | 2 +- components/form/Form.jsx | 1 + components/form/FormItem.jsx | 31 ++++++++++++++----------------- components/mentions/index.jsx | 2 +- examples/App.vue | 2 +- 5 files changed, 18 insertions(+), 20 deletions(-) diff --git a/antdv-demo b/antdv-demo index 75cbe7966..a71e2eac4 160000 --- a/antdv-demo +++ b/antdv-demo @@ -1 +1 @@ -Subproject commit 75cbe79669f7ce5dfe6c1a02d9dd4e2443840c08 +Subproject commit a71e2eac4c9b38092fc8edd2282bdd91170fa04b diff --git a/components/form/Form.jsx b/components/form/Form.jsx index b375bce3a..e87526abd 100755 --- a/components/form/Form.jsx +++ b/components/form/Form.jsx @@ -31,6 +31,7 @@ export const FormProps = { onFinish: PropTypes.func, onFinishFailed: PropTypes.func, name: PropTypes.name, + validateTrigger: PropTypes.oneOfType([PropTypes.string, PropTypes.array]), }; export const ValidationRule = { diff --git a/components/form/FormItem.jsx b/components/form/FormItem.jsx index 780bcdbce..e17e1cfe4 100644 --- a/components/form/FormItem.jsx +++ b/components/form/FormItem.jsx @@ -84,6 +84,7 @@ export const FormItemProps = { required: PropTypes.bool, validateFirst: PropTypes.bool, validateStatus: PropTypes.oneOf(['', 'success', 'warning', 'error', 'validating']), + validateTrigger: PropTypes.oneOfType([PropTypes.string, PropTypes.array]), }; export default { @@ -113,7 +114,6 @@ export default { errors: [], }; }, - computed: { fieldName() { return this.name || this.prop; @@ -153,6 +153,14 @@ export default { } return isRequired || this.required; }, + mergedValidateTrigger() { + let validateTrigger = + this.validateTrigger !== undefined + ? this.validateTrigger + : this.FormContext.validateTrigger; + validateTrigger = validateTrigger === undefined ? 'change' : validateTrigger; + return toArray(validateTrigger); + }, }, watch: { validateStatus(val) { @@ -189,10 +197,10 @@ export default { if (triggerName) { filteredRules = filteredRules.filter(rule => { const { trigger } = rule; - if (!trigger) { + if (!trigger && !this.mergedValidateTrigger.length) { return true; } - const triggerList = toArray(trigger); + const triggerList = toArray(trigger || this.mergedValidateTrigger); return triggerList.includes(triggerName); }); } @@ -226,7 +234,9 @@ export default { let formRules = this.FormContext.rules; const selfRules = this.rules; const requiredRule = - this.required !== undefined ? { required: !!this.required, trigger: 'change' } : []; + this.required !== undefined + ? { required: !!this.required, trigger: this.mergedValidateTrigger } + : []; const prop = getPropByPath(formRules, this.namePath); formRules = formRules ? prop.o[prop.k] || prop.v : []; const rules = [].concat(selfRules || formRules || []); @@ -236,19 +246,6 @@ export default { return rules.concat(requiredRule); } }, - getFilteredRule(trigger) { - const rules = this.getRules(); - return rules - .filter(rule => { - if (!rule.trigger || trigger === '') return true; - if (Array.isArray(rule.trigger)) { - return rule.trigger.indexOf(trigger) > -1; - } else { - return rule.trigger === trigger; - } - }) - .map(rule => ({ ...rule })); - }, onFieldBlur() { this.validateRules({ triggerName: 'blur' }); }, diff --git a/components/mentions/index.jsx b/components/mentions/index.jsx index cbb278aa5..cfd4a822a 100644 --- a/components/mentions/index.jsx +++ b/components/mentions/index.jsx @@ -98,8 +98,8 @@ const Mentions = { }); }, handleChange(val) { - this.$emit('change', val); this.$emit('update:value', val); + this.$emit('change', val); }, getNotFoundContent(renderEmpty) { const notFoundContent = getComponent(this, 'notFoundContent'); diff --git a/examples/App.vue b/examples/App.vue index 76c5dac5f..4bbcb8c1a 100644 --- a/examples/App.vue +++ b/examples/App.vue @@ -4,7 +4,7 @@