1.首先是自定义规则,需要在onReady或onMounted中注入规则
注:规则的定义就省略了,看官网就可以
https://uniapp.dcloud.net.cn/component/uniui/uni-forms.html
2.使用官网的动态表单配置
<uni-forms-item
required
:label="item.label+' '+index"
:name="['domains',index,'value']"
:rules="[{'required': true,errorMessage: '域名项必填'}]"
:key="item.id"
>
...
</uni-forms-item>
3.重点!!! 给表单动态添加ref并给当前uni-forms-item绑定validateFunction
...
<view class="unitDuty" v-for="(item,index) in formData.unitDuty" :key="item">
<uni-forms-item :label="'单位负责人姓名'+(index+1)" required
:rules="[{'required': true,errorMessage: '请输入单位负责人姓名'}]" :name="['unitDuty',index,'name']"
:ref="el=>getUnitDutyName(el,index)">
<uni-easyinput type="text" v-model="item.name" placeholder="请输入单位负责人姓名" />
</uni-forms-item>
</view>
...
//自定义规则
const rulesList={
unitDutyName: {
rules: [{
required: true,
errorMessage: '请填写单位负责人姓名'
},
{
//a-zA-Z\s
pattern: /^[\u4E00-\u9FA5\uf900-\ufa2d·s\-]{2,20}$/,
errorMessage: '用户名格式不正确'
}
]
},
}
const unitDutyNameRefList=ref([]);
//获取动态的dom
const getUnitDutyName=async (el,index)=>{
if(el){
//存储动态dom
unitDutyNameRefList.value[index]=el;
//遍历动态dom并给当前item设置validateFunction
unitDutyNameRefList.value.map((item)=>{
item.setRules(rulesList.unitDutyName.rules);
})
}
}