javascript - 尽管有引用,V-model 数组项仍无法更新

标签 javascript vue.js

我的主要目的是收集多个库存( future 使用)的请求数量。

* 我试图为引用的 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 中效果不佳。要改变数组,您应该使用 pushsplice 等方法。

要修复您的代码,您必须解决您的两个问题。也就是说,您必须使用数值初始化数组并通过函数改变数组,如下所示:

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 来递增数组。

还要注意拼接的使用。它所做的是用它自己的 x 元素替换数组的第 x 元素,但递增。

关于javascript - 尽管有引用,V-model 数组项仍无法更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58630693/

相关文章:

javascript - 这是 Javascript 中类继承的正确方法吗?

javascript - Angular 中的两种方式数据绑定(bind)未按我的预期工作

javascript - 如何在Jquery中的点击事件期间停止滚动

vue.js - 如何在 Nuxt 上定位 ESNext 模块?

vue.js - Vue 3 Teleport 是否只能移植到 vue 之外?

javascript - 如何使用组件定义属性?

javascript - 如何用vue.js显示按钮链接?

javascript - 在 Javascript 中编码字符串并显示字符串输出

typescript - Visual Studio 2017 Asp.Net Core 2.1 TypeScript Vue 设置 - 不是 SPA

javascript - 在 Bootstrap 中对同一元素使用两个数据切换