javascript - 将 Vuex 与 Vuelidation 一起使用的正确方法
问题描述
我正在为一个应用程序开发 Vue 前端,该应用程序需要在提交到后端之前在本地保存所有表单数据,以防网络连接问题导致服务中断。我正在使用 Vuex 来维护整个应用程序中的所有表单数据,以便可以根据需要将其保存到本地存储或从本地存储中恢复。
第二个要求是表单验证,为此我打算使用 Vuelidate 库。文档建议使用不带 Vuelidate 的 Vuelidate v-model
,只需要this.$v.touch()
在事件函数中即可。这就是我尝试过的,但它似乎不起作用。
请参见下面的示例:
<template>
<form>
<input name="full-name" v-model="fullName" placeholder="Full Name" />
</form>
</template>
<script>
export default {
name: "AForm"
computed: {
fullName: {
get() { return this.$store.state.fullName }
set(name) {
this.$v.touch();
this.$store.dispatch("updateFullName", name);
},
}
},
validations: {
fullName: minLength(4);
}
}
</script>
当我检查$v.fullName
时,该值恰好等于true
。当我查看整个$v
对象时,我看到$anyDirty: false
.
解决方案
验证配置格式错误
验证配置应该是:
export default {
/**
* Validation Config Format:
*
* validations: {
* PROP_NAME: {
* RULE_NAME: RULE
* }
* }
*/
validations: {
//fullName: minLength(4), // DON'T DO THIS
fullName: {
minLength: minLength(4)
}
},
}
$touch
它看起来像你用过this.$v.touch()
,但它应该是this.$v.$touch()
。但是,由于计算的 prop 只设置了一个 prop,因此您应该在通过 Vuex 操作更改 prop之后$touch()
调用该 prop(即$v.PROP_NAME.$touch()
) 。
export default {
computed: {
fullName: {
get() {
return this.$store.state.fullName;
},
set(name) {
//this.$v.touch() // DON'T DO THIS
this.$store.dispatch('updateFullName', name)
this.$v.fullName.$touch()
}
}
}
}
推荐阅读
- php - mysqli 语句准备有问题
- python - 我无法从确实的特定时间段内抓取每个链接内容
- python - 如何仅将 dynmodb 属性的值存储到 python 变量中?
- docker - 在 helm 图表中设置嵌套元素的值
- javascript - Firebase Firestore 模拟器(TypeError :FieldValue 导致测试库出错)
- c# - MassTransit/RabbitMQ - 将被拒绝的消息移动到死信并重新发送
- reactjs - react-native-vector-icon 显示“错误”图标
- javascript - React Native - 我如何摆脱警告“无法从函数体内更新组件......”
- python - python geopandas shapely file error AttributeError: 'str' object has no attribute 'is_geographic'
- php - 如何在 yii framweork 中使用 phpmailer 从函数发送附件?