我想使用 Vue 创建一个简单的表单构建器,用户可以在其中单击菜单中的按钮以将不同的表单字段添加到表单中。我知道如果只添加一种类型的表单字段,我可以用这样的东西来做( https://jsfiddle.net/u6j1uc3u/32/ ):
<div id="app">
<form-input v-for="field in fields"></form-input>
<button type="button" v-on:click="addFormElement()">Add Form Element</button>
</div>
<script type="x-template" id="form-input">
<div>
<label>Text</label>
<input type="text" />
</div>
</script>
和:
Vue.component('form-input', {
template: '#form-input'
});
new Vue({
el: '#app',
data: {
fields: [],
count: 0
},
methods: {
addFormElement: function() {
this.fields.push({type: 'text', placeholder: 'Textbox ' + (++this.count)});
}
}
})
但是如果有不止一种类型的表单域(输入、文件、选择等)怎么办?我在想可能为每种类型构建一个不同的组件,但是我将如何在一个表单元素列表中显示多种类型的组件?
我可以根据 fields
数组中的数据创建一个包含不同类型子组件的组件吗?
或者有没有更好的方法来解决我错过的这种情况?我刚刚开始学习 Vue,所以任何帮助表示赞赏!
原文由 Chris 发布,翻译遵循 CC BY-SA 4.0 许可协议
好的,所以我研究了动态元素并设法将它们组合在一起:
因此,我没有为
fields
数组中的每个项目创建一个新的component
form-input
组件,而是通过type
字段的属性