вычисленное свойство 'name' было присвоено, но оно не имеет установщика (без v-модели) - PullRequest
0 голосов
/ 06 июля 2018

Я пытаюсь сделать навигацию активной при нажатии на нее, добавив класс 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 голосов
/ 06 июля 2018

mapState создает только свойства геттера. Вы не можете назначить эти свойства.

Нет необходимости присваивать activeNavigation в любом случае, при фиксации автоматически обновляется сопоставленное значение activeNavigation.

Изменить это:

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

к этому:

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