javascript - 如何在 vuelidate 中设置验证规则以使其值与对象的字段相同?
问题描述
假设我有一个带有如下数据的 vue 组件:
data: () => ({
form: {
old_password: {
data: '',
type: 'password',
label: 'Old Password',
},
new_password: {
data: '',
type: 'password',
label: 'New Password',
},
repeat_password: {
data: '',
type: 'password',
label: 'New Password Confirmation',
},
},
}),
数据以这种方式格式化,因为我正在使用另一个插件 ant-design 来构建表单,因此以另一种方式格式化数据不是一种选择。该data
字段将存储实际数据。
然后,我为 vuelidate 设置了以下验证规则。
validations: {
form: {
old_password: {
data: { required },
},
new_password: {
data: { required },
},
repeat_password: {
data: { sameAsPassword: sameAs('new_password') },
},
},
},
规则有效,required
但sameAsPassword
规则无效。它总是返回错误,即使我确定我输入了相同的密码。我想它没有与正确的字段进行比较。如何设置规则以便与正确的字段进行比较?
解决方案
new_password
不是 的兄弟姐妹repeat_password.data
。来自内置验证器文档
- 定位器可以是同级属性名称或函数。当作为函数提供时,它接收正在验证的模型作为参数,并且 this 绑定到组件实例,因此您可以访问它的所有属性和方法,即使在嵌套验证的范围内也是如此。
所以需要将一个函数传递给sameAs
:
validations: {
form: {
old_password: {
data: { required },
},
new_password: {
data: { required },
},
repeat_password: {
data: {
sameAsPassword: sameAs(function() {
return this.form.new_password.data;
})
},
},
},
},
同时,要this
在函数内部工作,data
需要将箭头函数改为返回数据。IE
data() {
return {
form: {
old_password: {
data: '',
type: 'password',
label: 'Old Password',
},
new_password: {
data: '',
type: 'password',
label: 'New Password',
},
repeat_password: {
data: '',
type: 'password',
label: 'New Password Confirmation',
},
},
}
},
推荐阅读
- mysql - 如何将每条记录与另一条记录进行比较(名称反转问题)并删除重复记录?
- httphandler - Spring Boot2 Undertow 相同站点 - HttpHandler 自定义 - 需要帮助
- python-poetry - Python Poetry 与 scikit-umfpack 明显不兼容
- android - 与 kotlin 异步运行代码的最佳方式
- excel - 在 Powerpoint 上对齐图片
- php - 为 Woocommerce 中的特定支付网关添加百分比和固定成本的自定义费用
- c# - 为什么它不拿起任何相机?
- git - 理解 git 冲突
- laravel - 无法通过作曲家解决弃用通知
- java - 我已经在 git 上提交并推送了一个新的 feature_branch,但是在 github 上的中央存储库中提交/推送后,它没有显示该分支上的更改