【发布时间】:2020-04-29 16:43:52
【问题描述】:
我有一个在点击事件上动态添加字段的表单。当我更改或模糊它后,当字段值小于 9 位时,我试图显示一个 minlength 验证错误(这并不重要)。我的问题是,因为这些字段是动态创建的,并且本质上是相同的 v-model,所以它将规则应用于所有字段。我怎样才能使这项工作只影响用户所在的那个?屏幕会加载其中的 10 个,然后他们可以添加更多。因此,当他们填写最初的 10 个字段时,我不希望在以下所有字段的第 5 个字段之后弹出验证,因为第 5 个字段失败了。
这是我的代码的简化版本
<template>
<div>
<div>
<button @click="onAddBarcodes">Add More</button>
</div>
<div v-for="(barcode, index) in barcodes" :key="index">
<div>
<div>
<label>Starting Roll #:</label>
<input
name="startbarcoderoll"
maxlength="9"
v-model.trim="$v.barcode.barcodeStart.$model"
:id="barcode.id"
ref="bcentry"
/>
<!-- max length message -->
<div v-if="!$v.barcode.barcodeStart.minLength">
<span
v-if="!$v.barcode.barcodeStart.minLength"
>App Barcode must be exactly {{$v.barcode.barcodeStart.$params.minLength.min}} characters.</span>
</div>
</div>
<button @click="onDeleteBarcodes(barcode.id)">Remove</button>
</div>
</div>
</div>
</template>
<script>
const { minLength } = require("vuelidate/lib/validators");
export default {
data() {
return {
barcodes: [],
barcode: {
barcodeStart: ""
}
};
},
validations: {
barcode: {
barcodeStart: {
minLength: minLength(9)
}
}
},
methods: {
scanBarcodeNumber(value) {
this.barcode.barcodeStart = value;
this.$v.barcode.barcodeStart.$touch();
},
onAddBarcodes() {
const newBarcode = {
id: Math.random() * Math.random() * 1000,
barcodeStart: ""
};
this.barcodes.push(newBarcode);
},
onDeleteBarcodes(id) {
this.barcodes = this.barcodes.filter(barcode => barcode.id !== id);
}
}
};
</script>
让我看看发生了什么
编辑:Vuelidate 在全局 Vue 实例中安装和实例化,因此我可以在多个地方使用它。这就是为什么您在此特定代码中看不到它的原因
【问题讨论】:
标签: javascript vue.js vuelidate