Код Песочница с точным примером
https://codesandbox.io/s/veevalidate-components-vuetify-iftco
В приведенном выше примере, когда я ввожу неверное значение в поле ввода, состояние проверки возвращает Valid == true
, но должно возвращаться false
.
Я понимаю, что это происходит потому, что метод события @input
(resize
) будет запущен первым и тогда он присвоит значение :value
. Другими словами, vee-validate
проверяет существующее значение до запуска события.
Не уверен, как это исправить, чтобы сначала проверить входное значение, а затем запустить метод!
Как повторить проблему:
- Откройте консоль
- Измените значение поля
width
на 5 - Вы успешно получите сообщение об ошибке под полем, но флаг Valid в консоли имеет значение true, даже если поле недопустимо после завершения метода.
Я не уверен, как это исправить. Я пытался часами ..
<template>
<v-app>
<v-row>
<v-col v-for="(value, key) in fixture.dimensions" :key="key">
<ValidationProvider
:rules="`between:${fixture.limits[key].min},${fixture.limits[key].max}`"
v-slot="{ errors, valid }"
>
<v-text-field
:value="fixture.dimensions[key]"
@input="resize(key, valid)"
:label="key"
ref="key"
:min="fixture.limits[key].min"
:max="fixture.limits[key].max"
:error-messages="errors"
outlined
type="number"
></v-text-field>
</ValidationProvider>
</v-col>
</v-row>
</v-app>
</template>
<script>
import { ValidationProvider } from "vee-validate";
export default {
name: "App",
components: {
ValidationProvider
},
data: () => ({
fixture: {
dimensions: {
width: 1000,
height: 1500
},
limits: {
width: {
min: 300,
max: 1500
},
height: {
min: 300,
max: 1500
}
}
}
}),
mounted() {
console.log(this.fixture);
},
methods: {
resize(key, valid) {
console.log("valid?", valid);
this.fixture.dimensions[key] = event.target.value;
// this.fixture.iconObject.resize()
}
}
};
</script>