vue.js - Vuetify - 规则应该返回一个字符串或布尔值,而不是收到“未定义”
问题描述
我有一个带有日期选择器的表单,验证按预期工作,但我在浏览器的控制台中不断收到一条错误消息,“规则应该返回一个字符串或布尔值,而不是收到'未定义'”我只是想摆脱它,但是我不确定它在何时何地返回未定义的规则。
此外,由于某种原因,“未来”规则总是返回 false
<template>
<div>
<v-container>
<v-card>
<div class="container">
<v-form ref="form" v-model="isValid">
<v-row>
<v-col cols="12" sm="12" md="6">
<v-menu ref="menu" v-model="menu" :close-on-content-click="false" :return-value.sync="date" transition="scale-transition" offset-y min-width="290px">
<template v-slot:activator="{ on }">
<v-text-field v-model="route.departure" label="Departure" color="black" readonly v-on="on" :rules="[rules.required, rules.future]"></v-text-field>
</template>
<v-date-picker v-model="route.departure" no-title scrollable color="amber lighten-2">
<v-spacer></v-spacer>
<v-btn color="red accent-3" class="black-text" @click="menu = false">Cancel</v-btn>
<v-btn color="yellow" class="black-text" @click="$refs.menu.save(date)">OK</v-btn>
</v-date-picker>
</v-menu>
</v-col>
<v-col cols="12" sm="12" md="6">
<v-menu ref="menu_2" v-model="menu_2" :close-on-content-click="false" :return-value.sync="date" transition="scale-transition" offset-y min-width="290px">
<template v-slot:activator="{ on }">
<v-text-field v-model="route.arrival" label="Arrival" color="black" :rules="[rules.required, rules.today, rules.future]" readonly v-on="on"></v-text-field>
</template>
<v-date-picker v-model="route.arrival" no-title scrollable color="amber lighten-2">
<v-spacer></v-spacer>
<v-btn color="red accent-3" class="black-text" @click="menu_2 = false">Cancel</v-btn>
<v-btn color="yellow" class="black-text" @click="$refs.menu_2.save(date)">OK</v-btn>
</v-date-picker>
</v-menu>
</v-col>
</v-row>
</v-form>
</div>
</v-card>
</v-container>
</div>
</template>
<script>
export default {
data() {
return {
isValid: true,
date: new Date().toISOString().substr(0, 10),
menu: false,
menu_2: false,
route: {
departure: '',
arrival: '',
},
rules: {
required: value => !!value || 'Required.',
arrival: value => {
return (new Date(this.route.departure) < new Date(this.route.arrival) || 'Arrival date must be after the Departure date');
},
future: value => {
return (new Date() <= new Date(this.route.departure) && (new Date() <= new Date(this.route.arrival))) || "Date must be today's date or after"
}
}
}
},
}
</script>
解决方案
问题来自:rules="[rules.required, rules.today, rules.future]"
因为today
规则未定义和修改future
,并arrival
通过添加value
日期构造函数的 as 参数:
new Vue({
el: '#app',
vuetify: new Vuetify(),
data() {
return {
isValid: true,
date: new Date().toISOString().substr(0, 10),
menu: false,
menu_2: false,
route: {
departure: new Date().toISOString().substr(0, 10),
arrival: new Date().toISOString().substr(0, 10),
},
rules: {
required: value => !!value || 'Required.',
arrival: value => {
return (new Date(value) < new Date(this.route.arrival) || 'Arrival date must be after the Departure date');
},
future: value => {
return (new Date() <= new Date(this.route.departure) && (new Date() <= new Date(value))) || "Date must be today's date or after"
}
}
}
},
})
<link href="https://cdn.jsdelivr.net/npm/vuetify@2.x/dist/vuetify.min.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/vue@2.x/dist/vue.js"></script>
<script src="https://cdn.jsdelivr.net/npm/vuetify@2.x/dist/vuetify.js"></script>
<div id="app">
<v-app>
<v-content>
<v-container>
<v-card>
<div class="container">
<v-form ref="form" v-model="isValid">
<v-row>
<v-col cols="12" sm="12" md="6">
<v-menu ref="menu" v-model="menu" :close-on-content-click="false" :return-value.sync="date" transition="scale-transition" offset-y min-width="290px">
<template v-slot:activator="{ on }">
<v-text-field v-model="route.departure" label="Departure" color="black" readonly v-on="on" :rules="[rules.required, rules.future]"></v-text-field>
</template>
<v-date-picker v-model="route.departure" no-title scrollable color="amber lighten-2">
<v-spacer></v-spacer>
<v-btn color="red accent-3" class="black-text" @click="menu = false">Cancel</v-btn>
<v-btn color="yellow" class="black-text" @click="$refs.menu.save(date)">OK</v-btn>
</v-date-picker>
</v-menu>
</v-col>
<v-col cols="12" sm="12" md="6">
<v-menu ref="menu_2" v-model="menu_2" :close-on-content-click="false" :return-value.sync="date" transition="scale-transition" offset-y min-width="290px">
<template v-slot:activator="{ on }">
<v-text-field v-model="route.arrival" label="Arrival" color="black" :rules="[rules.required, rules.future]" readonly v-on="on"></v-text-field>
</template>
<v-date-picker v-model="route.arrival" no-title scrollable color="amber lighten-2">
<v-spacer></v-spacer>
<v-btn color="red accent-3" class="black-text" @click="menu_2 = false">Cancel</v-btn>
<v-btn color="yellow" class="black-text" @click="$refs.menu_2.save(date)">OK</v-btn>
</v-date-picker>
</v-menu>
</v-col>
</v-row>
</v-form>
</div>
</v-card>
</v-container>
</v-content>
</v-app>
</div>
推荐阅读
- tensorflow - TF2.0 中 Keras 损失中“sample_weight”参数的奇怪形状要求
- ionic-framework - 将 YouTube 直播流式传输到 ionic 4
- node.js - node.js multer - req.file 未定义
- .net-core - 配置 MassTransit 以使用 WebApplicationFactory 进行测试
- javascript - 使用 async/await 时未定义 regeneratorRuntime
- javascript - 如何将相邻数字的文本转换为显示为数字的千位逗号分隔的文本?
- angularjs - event.target.checked 属性不适用于复选框
- firebase - 是否可以在 IE 浏览器上访问 firebase 控制台?
- jquery - 如何使用引导程序 4 在移动模式下修复导航切换?
- spring-boot - 关于Tomcat最大线程实数的问题