【发布时间】:2020-05-15 03:38:32
【问题描述】:
我无法动态设置 v-model。
如果我明确输入,它会起作用:
<div class="form-group mr-3 mb-2">
<input type="text"
v-model="form[filters][firstlastname]"
>
</div>
但我想遍历一个我有字符串的对象,例如:'form[filters][firstlastname]'
父级具有带有属性的表单:
data() {
return {
form: new Form({
filters: {
gender: [],
firstlastname: 'My firstlastname'
所以,我从父组件向下传递表单和过滤器到子组件,这里是过滤器:
let formFilters = { filters: [
{
type: 'text',
property: 'form[filters][firstlastname]', // <-- string
placeholder: 'Name',
},
{
type: 'number',
property: 'paginate',
placeholder: 'Max rows'
},
]
}
子组件:(这里我循环遍历对象并生成输入字段)
<div v-for="(filter,index) in formFilters.filters"
:key="`${index}_${filter.property}`"
>
<input
v-if="filter.type === 'text' || filter.type === 'number'"
:placeholder="filter.placeholder"
:type="filter.type"
v-model="filter.property" //<--- set the property
>
这不起作用。 v-model 只是将其解释为字符串,而不是对表单属性的引用。
我测试了其他方法,比如:v-model="``${[filter.property]}``"(单,不是双 ```` 但它不会在 stackoverflow 中显示,否则它不会显示)和其他疯狂的东西,但它是无效的。
那么如何用包含字符串的变量设置v-model(以便动态设置)?
【问题讨论】:
-
我什至不明白这会如何工作:
v-model="form[filters][firstlastname]",不应该是:v-model="form['filters']['firstlastname']" -
我猜你是对的。但即使我将其修改为:
property: 'form[\'filters\'][\'firstlastname\']',它也会被解释为字符串。我也试过 'form.filters.firstlastname' 还是一样。 -
是的,我知道这行不通。但如果这不是来自 api,我建议你采取不同的方法来解决这个问题。首先,我认为这不是一个好主意?
-
过滤器是在父级中定义的(不是来自 api)。好吧,我可以通过为我的过滤器对象中的每个字段添加一个属性名称来解决它。然后我可以说:v-model="form.filters[filter.property]"。然后所有属性都需要在“form.filters”中......我认为让它完全动态会很好,但这似乎不可能......