场景:
在开发过程从,有时会用到表单,表单会绑定一个对象,对应这表单项的内容,如果某个表单项是动态生成的,并且附有默认值时,会出现不能修改的现象
示例:
如上图,表单我绑定了model为`creamForm: { name: ‘’, code: ‘’ },分别对应着编号和名称,但是列表是根据数据动态渲染的,所以初始化中的creamFrom中无法去默认定义键值对,只有在获取数据后,去遍历列表,再给creamForm赋予对应的键值对,如下:
list.map((item, i) => {
this.creatForm['type' + (i+1)] = item.type
this.creatForm['content' + (i+1)] = item.content
this.creatForm['rate' + (i+1)] = item.rate
})
通过这种方法去绑定对应的表单值,但是会出现一个问题,动态渲染的值无法修改,原因是在vue中,对象新增的key无法双向绑定
解决方案:
当数据没有被双向绑定时,可以使用this.$set()
来解决
语法:this.$set(原数组/对象,索引/key,修改的值)
所以上面的代码可以改成下面这种方式:
list.map((item, i) => {
this.$set(this.creatFrom, 'type'+(i+1), item,type)
this.$set(this.creatFrom, 'content'+(i+1), item,content)
this.$set(this.creatFrom, 'rate'+(i+1), item,rate)
})
这样就可以修改遍历渲染后的表单项的内容了