Vuelidate "required" 忽略 JS 中的属性值
Vuelidate "required" ignoring value attributed in JS
我创建了一个向导表单,它使用 Vuelidate 来验证它的字段。大多数字段只有“必需”功能,所以我的验证接近于此:
validations() {
if (this.currentStep === 0) {
return {
person: {
name: {
required,
},
age: {
required,
},
}
}
} else if (this.currentStep === 1) {
return {
person: {
street: {
required,
},
city: {
required,
},
state: {
required,
},
}
}
问题是,我从 API 接收此数据,因此用户可以自己填写字段,也可以让机器为他填写。当我收到数据时,我在JS中的一个函数中将此属性设置为接近以下内容:
attributeData():
this.person.name = apiData.name;
this.person.age = apiData.age;
this.person.street = apiData.street;
this.person.city = apiData.city;
this.person.state = apiData.state;
如果用户键入信息,则一切正常。如果我收到来自 API 的信息,那么我会收到错误信息,就好像输入为空一样。
我的 HTML 中的每个字段都是这样组织的:
<b-form-group label="Name">
<b-form-input
v-model="person.name"
type="text"
size="sm"
:class="{
'is-invalid':
submitted && $v.person.name.$error,
}"
></b-form-input>
<div
v-if="submitted && $v.person.name.$error"
class="invalid-feedback"
>
<span v-if="!$v.person.name.required"
>Name is required.</span
>
</div>
</b-form-group>
知道为什么 Vuelidate 在我直接在 JS 中赋予它们时无法识别这些值吗?我在另一页中以完全相同的方式进行了此操作,并且有效。在 DevTools 中,甚至 Vuelidate 的 $model 也具有来自 API.
的值
如果您有两个元素使用相同的标识符,则可能会发生此错误。
示例:
data: {user_id: null} 并在一个输入中设置 v-model="user_id"。
另一个元素输入:id:user_id
当心如果你没有操纵值然后它丢失了引用,示例:
数据:{用户:{名称:空}}
你用 API 填充了它,但后者在 created 或 mounted 中放了类似的东西:
this.user = {}
引用 user.name 已消失,无法再进行验证。
我创建了一个向导表单,它使用 Vuelidate 来验证它的字段。大多数字段只有“必需”功能,所以我的验证接近于此:
validations() {
if (this.currentStep === 0) {
return {
person: {
name: {
required,
},
age: {
required,
},
}
}
} else if (this.currentStep === 1) {
return {
person: {
street: {
required,
},
city: {
required,
},
state: {
required,
},
}
}
问题是,我从 API 接收此数据,因此用户可以自己填写字段,也可以让机器为他填写。当我收到数据时,我在JS中的一个函数中将此属性设置为接近以下内容:
attributeData():
this.person.name = apiData.name;
this.person.age = apiData.age;
this.person.street = apiData.street;
this.person.city = apiData.city;
this.person.state = apiData.state;
如果用户键入信息,则一切正常。如果我收到来自 API 的信息,那么我会收到错误信息,就好像输入为空一样。
我的 HTML 中的每个字段都是这样组织的:
<b-form-group label="Name">
<b-form-input
v-model="person.name"
type="text"
size="sm"
:class="{
'is-invalid':
submitted && $v.person.name.$error,
}"
></b-form-input>
<div
v-if="submitted && $v.person.name.$error"
class="invalid-feedback"
>
<span v-if="!$v.person.name.required"
>Name is required.</span
>
</div>
</b-form-group>
知道为什么 Vuelidate 在我直接在 JS 中赋予它们时无法识别这些值吗?我在另一页中以完全相同的方式进行了此操作,并且有效。在 DevTools 中,甚至 Vuelidate 的 $model 也具有来自 API.
的值如果您有两个元素使用相同的标识符,则可能会发生此错误。 示例:
data: {user_id: null} 并在一个输入中设置 v-model="user_id"。
另一个元素输入:id:user_id
当心如果你没有操纵值然后它丢失了引用,示例:
数据:{用户:{名称:空}}
你用 API 填充了它,但后者在 created 或 mounted 中放了类似的东西: this.user = {}
引用 user.name 已消失,无法再进行验证。