如何在 v-for 循环中改变数组对象的状态?
how to alterate state in array object at v-for loop?
我正在使用 Nuxt 在 Vue Js 上制作一个库存系统。我正在尝试创建一个在库存中查找的功能,如果库存中存在该项目,则数量会增加一个。问题?该函数运行成功,但我看不到我的 V-for 列表中的更改,但如果我将其他对象推送到我的数组中,则 v-for 循环会更新新数据。
<script lang="js">
import Vue from 'vue'
import Navbar from '../../components/Navbar'
export default Vue.extend({
components: {
Navbar
},
data(){
return{
products: [
{ name: 'abrazadera', id: 0, image: "https://carritoferretero.com/wp-content/uploads/2018/05/products-abrazadera-de-arranque-carrito-ferretero_2.png", price: 20},
{ name: 'tuerca', id: 1, image: "https://cdn.homedepot.com.mx/productos/819576/819576-d.jpg", price: 40},
{ name: 'martillo', id: 2, image: "https://cdn.homedepot.com.mx/productos/680442/680442-d.jpg", price: 50}
],
venta: [
]
}
},
methods: {
addProduct(id, index){
let busqueda = this.venta.find( item => item.id == id)
console.log(busqueda)
if(typeof(busqueda) == 'undefined'){
let newObj = this.products[index]
newObj.cantidad = 1
this.venta.push(newObj)
} else {
busqueda = this.venta.findIndex( element => element.id == id )
let newObj = this.venta[busqueda]
newObj.cantidad = this.venta[busqueda].cantidad + 1
this.venta[busqueda] = newObj
}
}
}
})
</script>
在我的“addProduct”函数中,我会在我的“venta”库存中找到一个产品,如果该项目不存在,我会在我的库存中添加一个产品,否则我会添加 + 1 个数量。该函数工作正常,但渲染 vfor 没有更新。只有当我使用“arrayelement.push”
添加新元素时,v-for 列表才会更新
有解决这个问题的想法吗?感谢您的回答
Vue 2 无法检测以通常方式对数组中现有项目进行的更改; here's the full explanation。您需要更改此行:
this.venta[busqueda] = newObj
至:
this.venta.splice(busqueda, 1, newObj)
(也可以用Vue.set
,但splice
至少还是标准的数组运算。)
我正在使用 Nuxt 在 Vue Js 上制作一个库存系统。我正在尝试创建一个在库存中查找的功能,如果库存中存在该项目,则数量会增加一个。问题?该函数运行成功,但我看不到我的 V-for 列表中的更改,但如果我将其他对象推送到我的数组中,则 v-for 循环会更新新数据。
<script lang="js">
import Vue from 'vue'
import Navbar from '../../components/Navbar'
export default Vue.extend({
components: {
Navbar
},
data(){
return{
products: [
{ name: 'abrazadera', id: 0, image: "https://carritoferretero.com/wp-content/uploads/2018/05/products-abrazadera-de-arranque-carrito-ferretero_2.png", price: 20},
{ name: 'tuerca', id: 1, image: "https://cdn.homedepot.com.mx/productos/819576/819576-d.jpg", price: 40},
{ name: 'martillo', id: 2, image: "https://cdn.homedepot.com.mx/productos/680442/680442-d.jpg", price: 50}
],
venta: [
]
}
},
methods: {
addProduct(id, index){
let busqueda = this.venta.find( item => item.id == id)
console.log(busqueda)
if(typeof(busqueda) == 'undefined'){
let newObj = this.products[index]
newObj.cantidad = 1
this.venta.push(newObj)
} else {
busqueda = this.venta.findIndex( element => element.id == id )
let newObj = this.venta[busqueda]
newObj.cantidad = this.venta[busqueda].cantidad + 1
this.venta[busqueda] = newObj
}
}
}
})
</script>
在我的“addProduct”函数中,我会在我的“venta”库存中找到一个产品,如果该项目不存在,我会在我的库存中添加一个产品,否则我会添加 + 1 个数量。该函数工作正常,但渲染 vfor 没有更新。只有当我使用“arrayelement.push”
添加新元素时,v-for 列表才会更新有解决这个问题的想法吗?感谢您的回答
Vue 2 无法检测以通常方式对数组中现有项目进行的更改; here's the full explanation。您需要更改此行:
this.venta[busqueda] = newObj
至:
this.venta.splice(busqueda, 1, newObj)
(也可以用Vue.set
,但splice
至少还是标准的数组运算。)