Маршрутизатор VueJS $ rout.push не может выдавать параметры запроса - PullRequest
0 голосов
/ 16 июня 2019

С какой стати это не работает?

selectChanged(val) {

        let term_ids = [];
        let taxonomy = '';

        val.forEach((obj) => {
          term_ids.push(obj.term_id);
          taxonomy = obj.taxonomy;
        });

        let obj = this.$route.query;
        obj[taxonomy] = term_ids.join(',');

        this.$router.push({
          query: obj,
        });

      },

объект выглядит так:

{education_levels: "33,36", candidate_countries: "304"}

Если я жестко закодирую вышеуказанный объект, он будет работать так, как задумано, VueJS Router выдаст строку запроса и будет выглядеть следующим образом: ?education_levels=33,36&candidate_countries=304

Но если я пройду query: obj, ничего не случится ...

1 Ответ

0 голосов
/ 16 июня 2019

Вам нужно assign все свойства с route.

Object.Assign создает новую КОПИРУ из $route, включая все перечисляемые СОБСТВЕННЫЕ свойства

Еще одно предложение -

Когда вы делаете это let obj = this.$route.query; -
Objects сохраняется в memory, поэтому, когда вы пытаетесь скопировать object, вы фактически копируете address из object, где это хранится в памяти. Поэтому, когда вы делаете это - obj[taxonomy] = term_ids.join(','); Вы случайно измените исходное значение, поэтому требуется клонирование

Вместо этого клонируйте его -

let obj = { ... this.$route.query }
this.$router.push({
   query: Object.assign({}, this.$route.query, obj),
});
...