У меня есть две строки времени в моей форме buefy в vue, и я хочу проверить вторую в соответствии с первой, чтобы ввести только разницу не более одного часа. У меня есть гранулярность полей до миллисекунд.
мой сценарий
import { Validator } from 'vee-validate';
//Cross-field Rules
Validator.extend('isOneHour', (value, [otherValue]) => {
function toSeconds(time_str) {
// Extract hours, minutes and seconds
var parts = time_str.split(':');
var mili = time_str.split('.')
// compute and return total seconds
return parts[0] * 3600 + // an hour has 3600 seconds
parts[1] * 60 + // a minute has 60 seconds
+parts[2] // seconds
+ mili[0] / 1000; //miliseconds
}
console.info(value, otherValue); // out
var difference = Math.abs(toSeconds(value) - toSeconds(otherValue));
return difference <= 3600;
}, {
hasTarget: true
});
мой шаблон:
<b-input
@keyup.native.enter = "getData()"
editable
:value = "startTime"
@change.native = "startTime = $event.target.value"
placeholder = "ex. 11:22:00.000"
icon = "clock"
v-mask = "'##:##:##.###'"
name = "startTime"
ref = "endTime"
></b-input>
<b-input
editable
name = "endTime"
:value = "endTime"
@change.native = "endTime = $event.target.value"
placeholder = "ex. 11:25:30.450"
icon = "stopwatch"
@keyup.native.enter = "getData()"
v-mask = "'##:##:##.###'"
v-validate = "'isOneHour:endTime'"
></b-input>
этот код не работает, он создаст бесконечный цикл, который приведет к сбою приложения. он работает перед:
var difference = Math.abs(toSeconds(value) - toSeconds(otherValue));
моя консольная ошибка: TypeError: time_str.split is not a function
что я здесь делаю не так?
Так! проблема заключалась в том, что мой Мероприятия на Vee Validate был установлен на «», и после того, как я установил его на "blur"
, проверка сработала.
Хотя ошибка исходила от error.first('symbol_input)
, который, по моему errorBagName
, должен был быть vErrors.first('symbol_input')
.
Если кто-то застрянет на этом, как я, возможно, этот ответ будет тем, где они ошиблись.