【发布时间】:2019-02-18 05:08:21
【问题描述】:
我正在尝试在 vue.js 中创建一个元素,这样当我更新我的购物车时,它会显示一个警告,其中包含已添加/更新到购物车的项目。因此,如果我添加一辆新车,它将显示最后添加的汽车。
cars: [
{ name: 'Porsche', quantity: 2},
{ name: 'Ferrari', quantity: 1},
{ name: 'Toyota', quantity: 3}
]
到
cars: [
{ name: 'Porsche', quantity: 2},
{ name: 'Ferrari', quantity: 1},
{ name: 'Toyota', quantity: 3},
{ name: 'Mustang', quantity: 1}
]
会显示
<div>
You have 1 x Mustang in Cart
</div>
但是,如果我更新已经在购物车中的汽车的数量,它将显示最后一辆车已更新。
cars: [
{ name: 'Porsche', quantity: 2},
{ name: 'Ferrari', quantity: 1},
{ name: 'Toyota', quantity: 3}
]
到
cars: [
{ name: 'Porsche', quantity: 2},
{ name: 'Ferrari', quantity: 1},
{ name: 'Toyota', quantity: 4}
]
会显示
<div>
You have 4 x Toyota in Cart
</div>
到目前为止,我已经在 this answer 上运行它
new Vue({
el: '#app',
data: {
cars: [
{ name: 'Porsche', quantity: 2},
{ name: 'Ferrari', quantity: 1},
{ name: 'Toyota', quantity: 3}
]
}
});
Vue.component('car-component', {
props: ["car"],
data: function() {
return {
lastAdded:''
}
},
template: `
<div>
You have {{lastAdded.quantity}} x {{lastAdded.name}} in Cart
</div>`,
watch: {
car: {
handler: function(newValue) {
this.lastAdded = newValue;
},
deep: true
}
}
});
html
<script src="https://unpkg.com/vue@2.5.17/dist/vue.js"></script>
<body>
<div id="app">
<p>Added to Cart:</p>
<car-component :car="car" v-for="car in cars"></car-component>
</div>
</body>
关键是现在它只检测一个物体何时已经在购物车中并改变数量,而不是当有一辆新车添加时。我试图和另一个观察者一起玩,但是没有用。提前致谢!
【问题讨论】:
-
这不会显示每辆车的警告信息吗?我以为您只希望它显示在购物车中添加/更新的最后一项。
-
Vue 在跟踪对象和数组时需要注意一些注意事项。看看这个:vuejs.org/v2/guide/list.html#Caveats
-
@DecadeMoon 我编辑了 html,它应该显示 lastItem 值
-
@Joe82 我的意思是,你对每辆车重复
<car-component>,而<car-component>将呈现“你有......在购物车中”,所以你会有多条消息.我很困惑,因为您的问题表明您只想为最后一项显示一条消息,而不是为每项显示一条消息。 -
@Joe82 否则,如果你的代码是正确的,你就不需要深入观察,也不需要做你想做的事情。
标签: vue.js vue-component