VeeValidate странные результаты при пользовательской проверке - PullRequest
0 голосов
/ 14 января 2020

Я проверяю поля времени начала и окончания в форме.
Входные данные выглядят так (да, у меня много параметров, чтобы можно было выполнять проверку на стороне сервера):

<ValidationObserver>
                       <div class="w3-third">
                           <label>From</label>
                           <ValidationProvider vid='st'   mode="eager"  :rules="{'available': ['@st','@et', res_date, 'startTime', selectedField.id] }" v-slot="{ errors}">                        
                               <dropdown id="starttime" :options="startTimeOptions" v-model="startTime"  @change="getDuration()"></dropdown> 
                               <span class="w3-red">{{ errors[0] }}</span>
                           </ValidationProvider>
                       </div>
                       <div class="w3-third  ">
                           <label>Until</label>
                           <ValidationProvider  vid="et"   :rules="{'available': ['@st','@et', res_date, 'endTime', selectedField.id] }" v-slot="{ errors}">                        
                               <dropdown id="endtime" :options="endTimeOptions"  v-model="endTime" @change="getDuration()"></dropdown> 
                               <span>{{ errors[0] }}</span>
                           </ValidationProvider>

                       </div>
                   </ValidationObserver> 

Даже с таким очень простым правилом проверки, как это, где я просто каждый раз возвращаю true:

extend('available', {
        validate(value, {s, e, dt, which, field } ) { 
            console.log("validate", which );
            return true;

        },
        message: 'The time is not available ', 
        params:[ 's', 'e', 'dt', 'which', 'field']
    });

Он проверяется один раз для каждого поля при вводе компонента формы. Но последующие проверки происходят 3 раза. Может ли это быть связано с тем, как я формирую свой объект правил? Я изменил режим, но если я попробую «ленивый», он не будет подтвержден после ввода формы. Обратите внимание, что это выбранный вход.

1 Ответ

0 голосов
/ 14 января 2020

Я вижу, что оба поля ссылаются на себя в правиле:

<ValidationProvider vid='st' :rules="{'available': ['@st','@et', res_date, 'startTime', selectedField.id] }" v-slot="{ errors}">                        

, поэтому он инициирует несколько попыток проверки на изменение, поскольку он проверяет сам ввод и проверяет каждое целевое поле, поэтому для одного и того же ввода он проверяет 2 раза и еще один для другого поля.

Вы должны ссылаться только на другие поля и избегать ссылок на себя, вместо этого используйте value.

<ValidationProvider vid='st' :rules="{'available': ['@et', res_date, 'startTime', selectedField.id] }" v-slot="{ errors}">                        

Вам нужно будет изменить Ваша реализация правил, чтобы принять это во внимание, хотя.

...