我需要使用v-for v-model.我阅读了文档,没有关于如何在不使用突变处理程序之外的突变的情况下将其与v-for一起使用的示例.
如何在v-for内部使用v-model而不直接改变属性?
<div v-for="product in products">
<select @change="addItem(product)" v-model="product.quantity">
<option value="">0</option>
<option v-for="n in 10">{{n}}</option>
</select>
</div>
// component
methods : {
...mapMutations({
addToCart: ADD_TO_CART
})
},
Run Code Online (Sandbox Code Playgroud)
不确定我完全理解你的要求,但看看下面的内容:
编辑
更新为使用Vuex - 但不是通过v模型,因为它不会调用所需的突变或操作
const store = new Vuex.Store({
state: {
products: [
{
name: 'foo',
quantity: 0,
},
{
name: 'bar',
quantity: 0,
},
],
},
getters: {
cart (state) {
return state.products.filter((product) => {
return product.quantity > 0
})
},
},
mutations: {
updateQuantity(state, payload) {
state.products[payload.index].quantity = payload.val
},
}
})
new Vue({
el: '#app',
computed: {
products() {
return store.state.products
},
cart() {
return store.getters.cart
},
},
methods: {
addItem (index, val) {
store.commit('updateQuantity', { index, val })
},
}
})Run Code Online (Sandbox Code Playgroud)
<script src="https://unpkg.com/vue/dist/vue.js"></script>
<script src="https://unpkg.com/vuex@next"></script>
<div id="app">
<div v-for="(product, index) in products">
<label>{{ product.name }}</label>
<select @change="addItem(index, $event.target.value)">
<option value="">0</option>
<option v-for="n in 10">{{n}}</option>
</select>
</div>
<h1>cart</h1>
<pre>{{ cart }}</pre>
</div>Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4903 次 |
| 最近记录: |