fix(Field): formatter not work when v-model changed (#6490)

This commit is contained in:
neverland 2020-06-08 20:41:19 +08:00 committed by GitHub
parent 9adbfcb26c
commit 1035503d65
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 24 additions and 17 deletions

View File

@ -1,14 +1,14 @@
// Utils
import { preventDefault } from '../utils/dom/event';
import { formatNumber } from '../utils/format/number';
import { resetScroll } from '../utils/dom/reset-scroll';
import { formatNumber } from '../utils/format/number';
import { preventDefault } from '../utils/dom/event';
import {
createNamespace,
isObject,
isDef,
addUnit,
isObject,
isPromise,
isFunction,
createNamespace,
} from '../utils';
// Components
@ -53,6 +53,10 @@ export default createComponent({
errorMessage: String,
errorMessageAlign: String,
showWordLimit: Boolean,
value: {
type: [String, Number],
default: '',
},
type: {
type: String,
default: 'text',
@ -76,6 +80,7 @@ export default createComponent({
watch: {
value() {
this.updateValue(this.value);
this.resetValidation();
this.validateWithTrigger('onChange');
this.$nextTick(this.adjustSize);
@ -83,7 +88,7 @@ export default createComponent({
},
mounted() {
this.format();
this.updateValue(this.value);
this.$nextTick(this.adjustSize);
if (this.vanForm) {
@ -270,14 +275,13 @@ export default createComponent({
}
},
format(target = this.$refs.input) {
if (!target) {
updateValue(value) {
value = String(value);
if (value === this.currentValue) {
return;
}
let { value } = target;
const originValue = value;
// native maxlength not work when type is number
const { maxlength } = this;
if (isDef(maxlength) && value.length > maxlength) {
@ -293,11 +297,16 @@ export default createComponent({
value = this.formatter(value);
}
if (value !== originValue) {
target.value = value;
const { input } = this.$refs;
if (input && value !== input.value) {
input.value = value;
}
return value;
if (value !== this.value) {
this.$emit('input', value);
}
this.currentValue = value;
},
onInput(event) {
@ -306,7 +315,7 @@ export default createComponent({
return;
}
this.$emit('input', this.format(event.target));
this.updateValue(event.target.value);
},
onFocus(event) {

View File

@ -289,11 +289,9 @@ test('formatter prop', () => {
},
});
const input = wrapper.find('input');
input.trigger('input');
expect(wrapper.emitted('input')[0][0]).toEqual('abc');
const input = wrapper.find('input');
input.element.value = '123efg';
input.trigger('input');
expect(wrapper.emitted('input')[1][0]).toEqual('efg');