【发布时间】:2023-05-04 18:16:02
【问题描述】:
尝试通过“v-for”从 vuex 渲染一个数组。
“玩家卡”组件未呈现。 但是“td”解决方案可以正常工作。
我在JSFiddle上的例子
HTML:
<div id="app">
<button v-on:click="moveItem">
Move Item
</button>
<table cellspacing="2" border="1" cellpadding="5">
<tr>
<td v-for="(item, item_idx) in getItems" v-bind:key="item.col">{{ (item.card)? item.card.name : 'none' }}</td>
</tr>
<tr>
<player-card v-for="(item, item_idx) in getItems" v-bind:key="item.col" v-bind:item="item"></player-card>
</tr>
</table>
<br/>
<p>{{msg}}</p>
</div>
商店:
const store = new Vuex.Store({
state: {
items: [{ col: 0, row: 0 },
{ col: 1, row: 0 },
{ col: 2, row: 0, card: { name: "hello" } } ]
},
getters: {
getterItems: state => { return state.items; }
},
mutations: {
MOVE_ITEM: state => {
state.items[0].card = state.items[2].card;
delete state.items[2].card;
state.message = JSON.stringify(state.items);
}
}
});
组件:
Vue.component('player-card', {
props: {
item: {
type: Object,
required: true
}
},
template: '<td>{{ (item.card)? item.card.name : "none" }}</td>'
});
应用:
new Vue({
el: '#app',
store,
data: function() {
return {
msg: ''
}
},
computed: {
getItems() { return this.$store.getters.getterItems; }
},
mounted: function() {
this.msg = JSON.stringify(this.getItems);
},
methods: {
moveItem() {
this.$store.commit('MOVE_ITEM');
this.msg = JSON.stringify(this.getItems);
}
}
});
我已经尝试了很多解决方案,但没有找到一个简单的解决方案。也许有人会提供不同的架构解决方案。
【问题讨论】:
标签: javascript vue.js vuex