Vuex getter в компоненте не обновляется - PullRequest
0 голосов
/ 11 декабря 2018

store.state image

Вот получатель из вычисленного компонента:

        computed: {
        get_indicatorsSubMenuButtons(){

            let p = this.$store.getters.get_indicatorsMainMenuButtonActive[0].mainMenuButtonJson;
            let j;
            switch(p) {
                case 'getFuelStock':
                    j = this.$store.getters.get_indicatorsSubMenuButtons[0].indicatorSubFilters;
                    break;
                case 'getFuelSell':
                    j = this.$store.getters.get_indicatorsSubMenuButtons[1].indicatorSubFilters;
                    break;
                case 'getArticleSell':
                    j = this.$store.getters.get_indicatorsSubMenuButtons[2].indicatorSubFilters;
                    break;
            }
            return j;
        },
    },

, а вот получатель из vuex:

        get_indicatorsSubMenuButtons: (state) => {
            let activeMainMenuButton = state.indicatorsMainMenuButtons.filter(item => item.active === true)[0].mainMenuButtonJson;
            let r  = state.indicatorsSubMenuButtons;
            return r;
        },

Когда я меняю активное состояние каждой кнопки, все данные в магазине обновляются, и получатель тоже.Но этот метод получения в компоненте обновляется только тогда, когда компонент монтируется, и когда я изменяю состояния родительского меню.

мутация в vuex:

        TOGGLE_MARKING_SETTINGS_SUB_MENU_ITEM: (state, payload) => {
            console.log('payload',payload);
            let o = payload.subFilterId,
                n = payload.subFilterName,
                s = payload.active;

            let activeMainType = state.indicatorsMainMenuButtons.filter(item => item.active === true)[0].mainMenuButtonJson;

            //Vue.set(vm.items, indexOfItem, newValue)

            let v = state.indicatorsSubMenuButtons;
            let vf = v.filter(item => item.subTypeName == activeMainType)[0];

            for (var i = 0; i < vf.indicatorSubFilters.length; i++) {



                if(vf.indicatorSubFilters[i].subFilterId == o){

                    Vue.set(
                        vf.indicatorSubFilters[i], 
                        'active', 
                        true
                    );

                } else {

                    Vue.set(
                        vf.indicatorSubFilters[i], 
                        'active', 
                        false
                    );

                };



            };

        },

store init:

import Vue from 'vue';
import Vuex from 'vuex';

Vue.use(Vuex);

export const store = new Vuex.Store({
    state: {
        indicatorsSubMenuButtons: [

        ],
...