Ott*_*tto 1 vue.js vue-component vuex vuejs2
我正在尝试通过添加类来单击它时使导航处于活动状态nav-selected.我已经看到过这样的其他问题,但它们是相关的,v-model因此它们没有帮助我.
我需要确保将它添加到商店中,以便即使刷新后我也能始终看到哪个页面处于活动状态.但是我收到以下错误:
Navigation.vue:
<template>
<v-container>
<v-layout align-center>
<!-- Logo -->
<v-flex sm2>
<img src="http://beam.space/img/icon.png" height="30px">
</v-flex>
<!-- Navigation -->
<v-flex sm8>
<v-layout wrap justify-center>
<v-flex sm2>
<router-link to="/myspaces">
<h2 @click="setActiveNav(0)" :class="{'nav-selected': activeNavigation === 0}" class="nav-text">My Spaces</h2>
</router-link>
</v-flex>
<v-flex sm2>
<router-link to="/inspirations">
<h2 @click="setActiveNav(1)" :class="{'nav-selected': activeNavigation === 1}" class="nav-text">Inspirations</h2>
</router-link>
</v-flex>
</v-layout>
</v-flex>
<v-flex sm2>
<p>profile</p>
</v-flex>
</v-layout>
</v-container>
</template>
<script>
import { mapState } from 'vuex';
export default {
name: "navigation",
computed: {
...mapState([
'activeNavigation'
])
},
methods: {
setActiveNav(activeNav) {
this.activeNavigation = activeNav;
this.store.commit('setActiveNavigation', this.activeNavigation);
}
}
}
</script>
<style scoped>
</style>
Run Code Online (Sandbox Code Playgroud)
Store.js:
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex);
export default new Vuex.Store({
state: {
activeNavigation: 0
},
getters: {
},
mutations: {
// Set Active navigation on click.
setActiveNavigation(state, id) {
state.activeNavigation = id;
}
},
// actions zijn a sync
actions: {
}
});
Run Code Online (Sandbox Code Playgroud)
mapState仅创建getter属性.您无法分配这些属性.
activeNavigation无论如何都不需要分配,提交将activeNavigation自动更新映射值.
改变这个:
setActiveNav(activeNav) {
this.activeNavigation = activeNav; // <-- Not allowed
this.store.commit('setActiveNavigation', this.activeNavigation);
}
Run Code Online (Sandbox Code Playgroud)
对此:
setActiveNav(activeNav) {
this.$store.commit('setActiveNavigation', activeNav);
}
Run Code Online (Sandbox Code Playgroud)