javascript - vue / vuetify 动态修改 v-text-field 属性
问题描述
我有几个领域:
<v-row>
<v-col cols="12" class="d-flex">
<v-text-field clearable outlined required :rules="rules.codeRules" name="code" v-model="attribute.code" label="Code"></v-text-field>
</v-col>
</v-row>
<v-row>
<v-col cols="12" class="d-flex">
<v-text-field clearable outlined required :rules="rules.nameRules" name="name" v-model="attribute.name" label="Name"></v-text-field>
</v-col>
</v-row>
在 Vuetify 的文档中,我看到有几个名为的属性error
会触发错误状态并error-messages
显示消息。
当表单提交时,如果我想触发这些属性的任何字段有任何错误。
我怎样才能做到这一点?例如,如何使用error
属性手动将名称为“code”的字段设置为错误状态?如何将个性化消息传递给它?我是否需要在data()
对象中专门创建一个变量才能做我想做的事?因为如果我必须这样做,这意味着我需要在data
对象中为表单中的每个字段创建一个错误和一个错误消息属性!?或者它可以通过准确选择我想要修改的字段并以某种方式直接更新其属性而不需要模型中的任何变量来做到这一点?
谢谢
编辑
这就是我正在做的事情:
<v-row>
<v-col cols="12" class="d-flex">
<v-text-field clearable outlined required :error="formErrors.code.error" :error-message="formErrors.code.errorMessages" :rules="rules.codeRules" name="code" v-model="attribute.code" label="Code"></v-text-field>
</v-col>
</v-row>
我的提交方法如下:
axios.post(postUrl, this.attribute, { Accept: "application/json" })
.then(response => {
if (response.data.success) {
Event.fire('message', {
type: 'success',
message: 'Attribute successfully saved'
});
this.$router.push('/attributes/list')
}
})
.catch(errors => {
// eslint-disable-next-line no-console
console.log(errors.response.data)
const responseErrors = errors.response.data
if (responseErrors) {
// eslint-disable-next-line no-console
console.log('here modafucka')
//const self = this
for (const key of Object.keys(responseErrors)) {
// eslint-disable-next-line no-console
console.log(responseErrors[key][0])
this.formErrors[key].error = true;
this.formErrors[key].errorMessages = responseErrors[key][0];
}
}
})
}
通过设置this.formErrors[key].error = true;
,我可以将字段置于错误状态,但仍然没有显示自定义错误消息
解决方案
首先,你不需要两者error
和error-messages
道具。如果您刚刚设置error-messages
,输入字段将进入错误状态并显示消息
我是否需要在 data() 对象中专门创建一个变量才能做我想做的事?因为如果我必须这样做,这意味着我需要在数据对象中为表单中的每个字段创建一个错误和一个错误消息属性!
是的,您需要error-messages
为每个字段设置道具。v-model
和已经有单独的变量rules
。
理想情况下,您将运行一个 for 循环来生成输入字段(如下所示),但一个简单的:error-messages="errorMessages.code"
&:error-messages="errorMessages.name"
也可以工作。
// Fields array
[
{
name: 'code',
rules: [ // list of rules ],
value: '' // Some value,
errorMessages: [] // Could be list or string
},
{
name: 'name',
rules: [ // list of rules ],
value: '' // Some value,
errorMessages: [] // Could be list or string
}
]
// Your form template
<v-row v-for="field in fields" :key="field.name">
<v-col cols="12" class="d-flex">
<v-text-field
clearable
outlined
required
:rules="field.rules"
:name="field.name"
v-model="field.value"
:label="field.name"
:error-messages="field.errorMessages"
>
</v-text-field>
</v-col>
</v-row>
推荐阅读
- spring-boot - 零对一(可选的一对一)实体关系问题(尝试分配空的一对一属性)
- excel - 如何用单元格之间的空白扩展动态范围?
- java - 添加 Openfeign 依赖项时出现 java.lang.IllegalStateException
- php - 如何修复 PHP 中的“无法重新声明”错误?
- php - Gmail使用PHP Mailer在我的超链接中去除href
- python-3.x - 如何在 tkinter 中使用多列表框制作标题和子标题
- git - 如何撤消 git reset --hard 恢复丢失的数据?
- python - 使用百分比拆分 Numpy ndarray 的最有效方法是什么?
- android - 如何更新 RecyclerView 中的图像?
- pandas - 如何将数据框列转换为 tslearn 需要的格式?