数组项作为 Vuejs 中的模型
array items as models in vuejs
我想提供表单(在 vuejs 中),在填写前一个输入时添加新输入。应删除清除的输入。至少必须有一个输入。到目前为止一切顺利,在 jsfiddle 中得到了这个
问题
创建 3 个项目,输入 a
到第一个输入,b
输入第二个输入,c
输入到第三个输入。现在删除b
文本。第 c
项也丢失了。知道这是为什么吗?日志记录函数显示c
位于数组的索引 1 处,因此它应该在那里,但 vue 不会呈现该项目。
免责声明:我不知道为什么会出现问题中描述的错误。可能是 v-for 导致 DOM 输入值和组件私有状态变得不同步。如果您知道此行为的原因,请分享
您是对的,this.list
正在正确更新。您可以通过注销输入字段旁边的名称来查看这一点:
var demo = new Vue({
el: '#demo',
data: {
items: []
},
methods: {
'manage': function(old, new_) {
var i = this.items.length;
while (i--) {
if (!this.items[i]['name']) {
this.items.$remove(this.items[i]);
}
}
}
},
watch: {
'items': {
handler: 'manage',
deep: true
}
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/1.0.26/vue.min.js"></script>
<div id="demo">
<div v-for="n in items.length + 1">
{{ items[n]['name'] }}
<input v-model="items[n]['name']"/>
</div>
</div>
可以通过在keyup
上调用manage
而不是在列表更改时调用来解决此问题。
以下是在keyup
上实现类似行为的方法:
var demo = new Vue({
el: '#demo',
data: {
items: []
},
methods: {
'manage': function(old, new_) {
var i = this.items.length;
while (i--) {
if (!this.items[i]['name']) {
this.items.$remove(this.items[i]);
}
}
}
}
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/1.0.26/vue.min.js"></script>
<div id="demo">
<div v-for="n in items.length + 1">
<input v-model="items[n]['name']" @keyup="manage"/>
</div>
</div>
此外,您使用的是 vue 的缩小版本。如果您使用未缩小的版本,您将看到您的代码正在提示一些warnings
。它们可能会导致意外行为。
我认为
您的第三项,即第三项输入,与第二项有依赖关系。 您应该在循环之外拆分数据集,并以另一种方法处理已删除的项目。 您循环访问相同的数据集,因此如果您修改它一个区域,它会显示在所有区域中。 通过向外部数据集添加/删除项,可以删除依赖项。
相关文章:
- 在VanillaJS中模拟模型双向数据绑定
- 为集合分配大量的模型弹药
- 如何使用backbone.js从集合中获取模型名称
- 骨干模型默认值-todos.js示例中不必要的代码
- EmberJS中支持单字母单词模型
- 2个backbone.js集合,具有相同的模型,但排序顺序不同
- 将不在模型中的数据返回到mvc控制器
- 如何在视图模型contet更新更新上调用Jquery函数
- 如何使用Javascript客户端对象模型检索Sharepoint 2010列表项权限
- 我应该如何检查主干.主干.模型更改时查看
- Ext.js从json构建模型关系的问题
- 如何使用dropzone&vueJs
- 显示模块模式在Knockout中设置模型的新实例
- 使用导航属性创建Kendo UI网格模型的问题
- Angular,函数在(模型)工厂中返回值
- VueJS复选框模型数组的整数
- 输入模型的Vuejs v-if条件
- 验证VueJS中模型中的数据?任何Vue验证器都不会'不起作用
- 如何从全局对象自动更新vuejs模型中的数据
- 数组项作为 Vuejs 中的模型