前端模版
要点说明(仅是自己在调试中总结的个人理解,非官方,认知有限)
- v-model是用来绑定数据的,和数据结构中的字段名保持一致,否则无法取得数据
- prop和和v-model的字段名相同,由于这里是动态生成input标签,所以prop属性也应该是动态的,因为rules是根据prop来校验的,所以rules在formItem域中单独设置
- 如果设置了非空的规则,输入数据后检查不通过,则应该是prop和v-model设置的不同原因导致
- 为了使两个输入框同行显示,这里每列设置单独的formItem(尝试了N中写法实现的)
<Form ref="applyInfo" :model="applyInfo" :rules="rules">
<Card>
<p slot="title">
<Icon type="ios-chatboxes"></Icon>
生产者白名单新增
</p>
<div id="produce">
<FormItem>
<Row>
<Col span="12">
<Button type="primary" @click="addProduceData">添加</Button>
</Col>
</Row>
</FormItem>
<Row v-for="(item, index) in applyInfo.produceData.items" v-if="item.status" :key="index">
<Col span="6" >
<FormItem label="topic" :prop="'produceData.items.'+index+'.value.topic'" :label-width=110 :rules="[{required:true,message:'topic不能为空',trigger:'blur'}]">
<Input v-model="item.value.topic" placeholder="输入topic名称"/>
</FormItem>
</Col>
<Col span="6" offset=1>
<FormItem label="白名单bns" :prop="'produceData.items.'+index+'.value.bns'" :label-width=110 :rules="[{required:true,message:'topic不能为空',trigger:'blur'}]">
<Input v-model="item.value.bns" placeholder="输入生产者bns白名单"/>
</FormItem>
</Col>
<Col span="6" offset="1">
<Button type="error" @click="deleteRow(index)">删除</Button>
</Col>
</Row>
</div>
</Card>
</form>
js部分
<script>
export default {
data() {
return {
index:1,
applyInfo: {
produceData:{
items:[
{
}
]
},
},
},
methods: {
addProduceData(){
this.index++;
this.applyInfo.produceData.items.push({
value:{
topic:'',
bns:''
},
index: this.index,
status:1
})
},
}
效果
