Vuex getter не распознает изменение состояния при добавлении элементов в существующий объект. - PullRequest
0 голосов
/ 21 ноября 2018

У меня есть массив с именем tour_plan в моем состоянии.

У меня есть два действия в vuex actions.js

  1. select_location
  2. select_tour

В select_location я фиксирую мутацию set_location следующим образом:

commit ("set_location", {день, location_id, location_name, location_payment})

затеммоя мутация

set_location(state, payload) {

        try {
            state.tour_plan.push(payload);
        } catch (error) {

        }

    },

Я просто перенес полезную нагрузку в массив tour_plan.

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

set_tour(state, payload) {
        try {

            state.tour_plan[state.tour_plan.length - 1].tour_id = payload.tour;
            state.tour_plan[state.tour_plan.length - 1].tour_payment = payload.tour_payment;
            state.tour_plan[state.tour_plan.length - 1].tour_name = payload.tour_name;
            state.stage = 3;
        } catch (error) {

        }
    }

, тогда у меня есть геттер с именем cost

cost: (state) => {
        try {
            let arr = [];
            state.tour_plan.forEach(element => {

        console.log("THIS GETTER RUNS");

                if (element.location_name) {
                    let temp = {};
                    temp.day = element.day;
                    temp.item = 'Location fee';
                    temp.fee = element.location_payment
                    arr.push(temp);
                }
                if (element.tour_name) {

                    let temp = {};
                    temp.day = element.day;
                    temp.item = "Tour fee";
                    temp.fee = element.tour_payment;
                    arr.push(temp);
                }
            })
            return arr;
        } catch (error) {
            console.log("ERR", error)
        }
    }

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

У меня есть массив с именем tour_plan в моем состоянии.

У меня есть два действия в vuexactions.js

  1. select_location
  2. select_tour

В select_location я фиксирую мутацию set_location, как этот коммит ("set_location", {day, location_id, location_name, location_payment})

тогда моя мутация

set_location(state, payload) {

        try {
            state.tour_plan.push(payload);
        } catch (error) {

        }

    },

Я просто перенес полезную нагрузку в массив tour_plan.

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

set_tour(state, payload) {
        try {

            state.tour_plan[state.tour_plan.length - 1].tour_id = payload.tour;
            state.tour_plan[state.tour_plan.length - 1].tour_payment = payload.tour_payment;
            state.tour_plan[state.tour_plan.length - 1].tour_name = payload.tour_name;
            state.stage = 3;
        } catch (error) {

        }
    }

, тогда у меня есть геттер с именем cost

cost: (state) => {
        try {
            let arr = [];
            state.tour_plan.forEach(element => {

        console.log("THIS GETTER RUNS");

                if (element.location_name) {
                    let temp = {};
                    temp.day = element.day;
                    temp.item = 'Location fee';
                    temp.fee = element.location_payment
                    arr.push(temp);
                }
                if (element.tour_name) {

                    let temp = {};
                    temp.day = element.day;
                    temp.item = "Tour fee";
                    temp.fee = element.tour_payment;
                    arr.push(temp);
                }
            })
            return arr;
        } catch (error) {
            console.log("ERR", error)
        }
    }

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

1 Ответ

0 голосов
/ 23 ноября 2018

Это была проблема с тем, как я мутировал.Это сработало для меня.

Vue.set(state.tour_plan[state.tour_plan.length - 1], 'tour_id', payload.tour)
Vue.set(state.tour_plan[state.tour_plan.length - 1], 'tour_payment', payload.tour_payment)
Vue.set(state.tour_plan[state.tour_plan.length - 1], 'tour_name', payload.tour_name)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...