vue element动态渲染、移除表单并添加验证的实现
又接到新需求了吧~~
背景
在一个大表单里,有可能会出现这种需求,用户可以自己操作动态添加、移除表单,更加个性化的效果。
常见于填写个人信息、附加内容的表单
例如:
“工作经历”可以用户自己点击继续添加按钮,在原有的表单后面append多一个表单,不需要就点击右上方X按钮移除
问题
在实现之前,提出几个问题
- vue怎么动态渲染或移除表单上去
- v-model怎么绑定动态添加表单的value值
- 动态新增的表单如何验证
- 动态表单怎么填写对应的prop
- ...
好吧,我当时也思考了一会,最后选择数组方式,动态渲染
代码实现讲解
利用数组,v-for循环方式,可以完美实现动态渲染和移除,因为操作的只有对象数组而已
exportdefault{ name:'vouchersDetail', data(){ return{ form:{ regionName:'', regionCode:'', //动态添加的对象数组 azList:[ { azName:'', logicCode:'', physicCode:'' } ] } } }, computed:{ //至少保留一个动态表单的开关 isShowCloseBtn(){ returnthis.form['azList'].length>1 } }, methods:{ addItem(){ //点击添加表单的按钮,只需要将表单绑定的value作为对象push到对象数组 this.form['azList'].push({ azName:'', logicCode:'', physicCode:'', weight:'' }) }, deleteItem(index){ //点击移除表单的按钮,根据点击的当前index移除对象数组的元素 this.form['azList'].splice(index,1) }, goBack(){ window.history.back(-1) } } }
请格外注意动态添加表单的rule和prop
每个动态添加的表单都要加上rule
prop需要根据对象数组下标绑定设置对应的value(:prop="'azList'+index+'.azName'")
那么对应的html形式为
写在后面
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。