我正在从 API 中分配默认值,但是当 v-text-field 的值为 0 时,:rules 标签将其视为未设置:
图像这是我的代码
<v-col cols="12" sm="6" md="4">
<v-text-field type="number" :rules="incapacidadRules" min="0" v-model="editedItem.incapacidad" label="Incapacidad"></v-text-field>
</v-col>
<v-col cols="12" sm="6" md="4">
<v-text-field type="number" min="0" :value="editedItem.descanso" :rules="descansosRules" v-model="editedItem.descanso" label="Descansos"></v-text-field>
</v-col>
<v-col cols="12" sm="6" md="4">
<v-text-field type="number" min="0" :rules="permisosRules" v-model="editedItem.permiso" label="Permisos"></v-text-field>
</v-col>
和我的规则
incapacidadRules: [
v => !!v || 'Incapacidad Requerido'
],
descansosRules: [
v => !!v || 'Descansos Requerido'
],
permisosRules: [
v => !!v || 'Permisos Requerido'
],
当我手动将值设置为 0 时,规则没有问题。
0 是假的。所以!!0
==false
.对于您的规则,也许使用typeof v === "number" ? v : 'Incapacidad Requerido'
而不是 !!五.
考虑!~a
对a >= 0
为真,对a < 0
为假。
我可以解决这个问题:正如 Tanner 提到的 0 是一个假的,所以当你将值设置为
editItem(item){
this.editedItem.faltas=item.faltas;
}
并且item.faltas
为 0,则 V 文本字段被识别为 false,但值与 0 不同时没有问题。因此,您需要始终将值设置为字符串:
editItem(item){
this.editedItem.faltas=`${item.faltas}`;
}
您可以使用转换类型的parseInt()
或其他变体来验证数值而不是字符串值。v-text-field>
表示字符串值,0 是假的,因此触发规则。
(v) => {
if (parseInt(v) >= 0) return true;
return 'Incapacidad Requerido';
},