|
11 | 11 | v-model="originValid" |
12 | 12 | :disabled="validatorDisabled" |
13 | 13 | :model="validatorModel" |
| 14 | + :model-key="validatorModelKey" |
14 | 15 | :rules="fieldValue.rules" |
15 | 16 | :messages="fieldValue.messages" |
16 | 17 | @input="validatorChangeHandler" |
|
59 | 60 | } |
60 | 61 | }, |
61 | 62 | data() { |
| 63 | + const validatorModelKey = 'value' |
62 | 64 | const modelKey = this.field.modelKey |
63 | 65 | const modelValue = modelKey ? this.form.model[modelKey] : null |
64 | 66 | return { |
65 | 67 | validatorDisabled: false, |
| 68 | + validatorModelKey, |
66 | 69 | modelValue: modelValue, |
67 | | - validatorModel: modelValue |
| 70 | + validatorModel: { |
| 71 | + [validatorModelKey]: modelValue |
| 72 | + } |
68 | 73 | } |
69 | 74 | }, |
70 | 75 | computed: { |
|
112 | 117 | this.modelValue = newModel |
113 | 118 | } |
114 | 119 | }, |
115 | | - modelValue(newModel) { |
116 | | - // update form model |
117 | | - this.form.model[this.fieldValue.modelKey] = newModel |
118 | | - this.updateValidatorModel() |
| 120 | + modelValue: { |
| 121 | + handler(newModel) { |
| 122 | + // update form model |
| 123 | + this.form.model[this.fieldValue.modelKey] = newModel |
| 124 | + this.updateValidatorModel() |
| 125 | + }, |
| 126 | + sync: true |
119 | 127 | }, |
120 | 128 | originValid(newVal) { |
121 | 129 | this.lastOriginValid = newVal |
|
144 | 152 | if ((!debounceTime && debounceTime !== 0) || debounceTime < 0 || this.fieldValue.trigger === 'blur') return |
145 | 153 | this.getValidatorModel = debounce((modelValue) => { |
146 | 154 | this.pending = false |
147 | | - this.validatorModel = modelValue |
| 155 | + this.validatorModel[this.validatorModelKey] = modelValue |
148 | 156 | this.form.updatePending() |
149 | | - this.asyncSameCheck() |
| 157 | + this.validate() |
150 | 158 | return modelValue |
151 | | - }, debounceTime, false, this.validatorModel) |
152 | | - }, |
153 | | - asyncSameCheck() { |
154 | | - const validator = this.$refs.validator |
155 | | - const validatorModel = this.validatorModel |
156 | | - if (validator) { |
157 | | - // same value, Vue do not trigger watch handler |
158 | | - // so need to force validate |
159 | | - if (validatorModel === validator.model) { |
160 | | - validator && validator.validate() |
161 | | - } |
162 | | - } |
| 159 | + }, debounceTime, false, this.validatorModel[this.validatorModelKey]) |
163 | 160 | }, |
164 | 161 | focusInHandler() { |
165 | 162 | this.focused = true |
166 | 163 | }, |
167 | 164 | focusOutHandler() { |
168 | 165 | this.focused = false |
169 | 166 | this.updateValidatorModel() |
170 | | - this.asyncSameCheck() |
| 167 | + this.validate() |
171 | 168 | }, |
172 | 169 | initFocusEvents() { |
173 | 170 | if (this.fieldValue.trigger === 'blur') { |
|
176 | 173 | formItem.addEventListener(EVENT_FOCUSOUT, this.focusOutHandler, false) |
177 | 174 | this.getValidatorModel = (modelValue) => { |
178 | 175 | if (this.focused) { |
179 | | - return this.validatorModel |
| 176 | + return this.validatorModel[this.validatorModelKey] |
180 | 177 | } else { |
181 | 178 | this.pending = false |
182 | 179 | this.form.updatePending() |
|
192 | 189 | }, |
193 | 190 | updateValidatorModel() { |
194 | 191 | this.pending = true |
195 | | - this.validatorModel = this.getValidatorModel(this.modelValue) |
| 192 | + this.validatorModel[this.validatorModelKey] = this.getValidatorModel(this.modelValue) |
196 | 193 | if (this.pending) { |
197 | 194 | this.form.setPending(this.pending) |
198 | 195 | this.originValid = undefined |
|
0 commit comments