2017-04-13 95 views
2

随着Vue.js您可以在表单输入绑定到一个属性:Vue.js得到所有V模型绑定

https://vuejs.org/v2/guide/forms.html

我工作的一个项目,我“动态”虽然生成表单。这里的v模型绑定只是基于输入名称设置的属性。

虽然问题是我仍然想知道如何正确地获得这些v模型绑定。到目前为止,所有我所看到的是人们手动设置自己的Vue的实例的属性绑定:虽然没有手动设置数据属性

new Vue({ 
    el: '...', 
    data: { 
    checkedNames: [] 
    } 
}) 

是否有可能以某种方式抓住所有的v-model绑定?

当创建一个带有变化的动态表单时,动态数量的字段会有很大帮助。

我想一个选项是简单地从javascript输入中检索名称属性,但我希望可能已经存在一些东西,因为v-model可能调用了一个可能已经在Vue实例中已知的setter。

返工的例子从答案:

https://jsfiddle.net/yMv7y/2477/

回答

3

按照official documentation

有可能反应性属性添加到使用Vue.set(object, key, value)方法嵌套对象。

这意味着你开始data可以是这样的:

{ 
    customForm: [], 
    values: {} 
} 

假设customForm是描述在你的自定义窗体一堆领域的领域对象的数组。它在开始时是空的,因为你说你的表单将被动态创建。

一旦您生成了动态数据,您只需将其分配到customForm,并通过它循环以添加上述Vue.set方法的反应属性。

下面是一个JSFiddle的例子。我正在使用this.$set,但这只是Vue.set的别名。

+0

优秀的答案。除此之外,'values'模型​​可以重新赋值如下:'this.values = myNewForm.reduce((model,field)=> {model [field.id] =''; return model},{ });' –

+0

尽管您正在使用Vue.js中指定的数组来渲染表单。当您仅仅将Vue连接到预定义的HTML表单时,是否可以这样做?我正在尝试重构JSFiddle,但我不确定这是否会起作用。感谢您的帮助! –

+0

没关系,根据你的例子得到了答案:https://jsfiddle.net/yMv7y/2477/ –