Ant Design vue 模态框form表单初始值不能动态更新
程序员文章站
2022-03-02 11:54:06
...
在用Ant Design vue框架时遇到一个问题,在实现编辑功能时,我们是调用一个模态框modal,调用modal中methods定义的edit方法,然后用initialValue来填充表单的初始值。但后面发现第一次打开编辑modal时,初始值能够正常赋值,当再次打开modal窗口时,表单显示的值还是第一次打开的初始值。
代码大概是这样:
<template>
<a-modal>
<a-form :form="form">
<a-form-item>
<a-input
v-decorator="[
'title',
{initialValue: title, rules: [{ requied: true, message: '请输入标题' }]}
]"
placeholder="起个标题" />
</a-form-item>
</a-form>
</a-modal>
</template>
data定义title参数来动态绑定数据:
data () {
return {
title: ''
}
},
methods () {
// record是list列表页面传过来的当前行对象
edit (record) {
this.title = record.title
}
}
这是因为第一次打开modal时,Form会得到一个initialValue值,但该值只在组件挂载的时候执行一次,后面不会再执行,也就数据不会再次更新。
网上查到的方法:
modal模态框会应用一个Visible来控制是否显示, 我们只要利用这个值的变化就可以实现modal模态框的重新挂载了。
{
Visible && <Modal ....../>
}
但这种语法是什么意思,没看懂?有知道的童鞋跟我说下
解决方法:
(1)去掉了initialValue参数
<template>
<a-modal>
<a-form :form="form">
<a-form-item>
<a-input
v-decorator="[
'title',
{rules: [{ requied: true, message: '请输入标题' }]}
]"
placeholder="起个标题" />
</a-form-item>
</a-form>
</a-modal>
</template>
(2)在edit方法改为由setFieldsValue来设置初始值:
import pick from 'lodash.pick'
data () {
return {
model: {}
}
},
methods () {
// record是list列表页面传过来的当前行对象
edit (record) {
// 重置表单数据
this.form.resetFields()
this model = Object.assign({}, record)
this.$nextTick(() => {
// 设置初始值
this.form.setFieldsValue(pick(this.model, ['title']))
})
}
}