Vue.use(Vuex)
const store = new Vuex.Store({
state: {
view: 'list'
},
mutations: {
CHANGE_VIEW (state, type) {
state.view = type
},
}
});
Vue.component('list-view', {
template: `
<div>
<h5>List</h5>
<ul>
<li v-for="item in dummyData">{{item}}</li>
</ul>
</div>
`,
data() {
return {
dummyData: [1, 2, 3, 4, 5]
}
}
})
Vue.component('grid-view', {
template: `
<div>
<h5>Grid</h5>
<table>
<tr v-for="item in dummyData"><td>{{item}}</td></tr>
</table>
</div>
`,
data() {
return {
dummyData: [1, 2, 3, 4, 5]
}
}
})
const app = new Vue({
el: '#app',
store,
data: {
dummyData: [1, 2, 3, 4, 5]
},
computed: {
view() { return this.$store.state.view }
},
methods: {
changeView(type) {
this.$store.commit('CHANGE_VIEW', type)
}
}
})
table {
font-family: arial, sans-serif;
border-collapse: collapse;
width: 100%;
}
td, th {
border: 1px solid #dddddd;
text-align: left;
padding: 8px;
}
tr:nth-child(even) {
background-color: #dddddd;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.9/vue.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vuex/3.0.1/vuex.min.js"></script>
<div id="app">
<div class="control">
<p>Change to:</p>
<button v-on:click="changeView('list')">List</button>
<button v-on:click="changeView('grid')">Grid</button>
</div>
<div class="users-container">
<div v-if="view === 'list'">
<list-view></list-view>
</div>
<div v-else>
<grid-view></grid-view>
</div>
</div>
</div>
あなたはVuexガイドに示すように、代わりにテンプレートに格納値を結合の計算されたプロパティを使用しようとする必要がありますhttps://vuex.vuejs.org/en/state .html –