已分配计算属性“名称”,但尚未设置(没有v模型)

时间:2018-07-06 10:20:04

标签: vue.js vuejs2 vue-component vuex

我试图通过添加类nav-selected使导航处于活动状态。我见过其他类似问题,但它们与v-model有关,因此对我没有帮助。

我需要确保将其添加到商店中,以便即使刷新后也始终可以看到哪个页面处于活动状态。但是,我收到以下错误:

error

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>

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: {
    }
});

1 个答案:

答案 0 :(得分:5)

mapState仅创建吸气剂属性。您无法分配这些属性。

无论如何都无需分配给activeNavigation,提交将自动更新activeNavigation的映射值。

更改此:

setActiveNav(activeNav) {
    this.activeNavigation = activeNav;  // <-- Not allowed
    this.store.commit('setActiveNavigation', this.activeNavigation);
}

对此:

setActiveNav(activeNav) {
    this.$store.commit('setActiveNavigation', activeNav);
}