javascript - 尽管有参考,V-model 数组项无法更新
问题描述
我的主要目的是收集多个库存的请求数量(未来使用)。
* 我试图为引用的 v 模型创建一个计数器。 我做了这样的事情。但它不起作用:
new Vue({
el: '#app',
data: {
counter: []
},
methods: {
increment(x) {
this.counter[x]++
}
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
<div v-for="i in 2">
<div><input type="text" v-model="counter[i]"></div>
<button v-on:click="increment(i)">Increment</button>
</div>
</div>
有不同的方法可以做到这一点吗?我错过了什么吗?
解决方案
您的代码不起作用有两个原因:
A)您的数组是空的,因此当您counter[i]
用作 v-model 时,您正在使用undefined
,它不能增加。
B)您正在按索引更改数组,这不适用于 Vue。要改变数组,您应该使用类似push
or的方法splice
。
要修复您的代码,您必须解决您的两个问题。也就是说,您必须使用数值初始化数组并通过函数改变数组,如下所示:
new Vue({
el: '#app',
data: {
counter: [0, 0]
},
methods: {
increment(x) {
this.counter.splice(x, 1, this.counter[x] + 1);
}
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
<div v-for="(val, i) in counter">
<div><input type="text" v-model="counter[i]"></div>
<button v-on:click="increment(i)">Increment</button>
</div>
</div>
请注意,我还将您的模板更改为使用(val, i) in counter
而不是i in 2
. 这样做是为了让您可以从起始索引访问您的数组。val
是元素,i
是索引,所以你i
用来增加你的数组。
还要注意splice
. 它所做的是将x
数组的第 th 元素替换为它自己的x
第 th 元素,但递增。
推荐阅读
- javascript - 函数完成后我的节点脚本挂起
- mysql - 如何修复查询结果不显示?
- python-3.x - 忽略词性模式NLTK中的填充词
- optimization - 如何获取chainer更新规则中loss的值
- python - 散景图不会随着单击数据表中的列值而动态变化
- java - 将 PubSub 模拟器与 Spring Cloud GCP 一起使用时出错(未实现:找不到方法)
- build - 如何根据当前 Cargo 命令更改 build.rs 行为?
- c++ - 使用 shared_from_this 参数等待 std::future 获取 std::async 会阻止对 this 的破坏
- python - Python:“分箱”子数组
- javascript - Discord.js - 将 N 个命令参数存储到一个数组中