Vue-router перед запросом RouteEnter Vue-Resource

Я использовал эту ссылку в качестве ссылки, чтобы сделать запрос перед вводом маршрута: https://router.vuejs.org/en/advanced/data-fetching.html

import Vue from 'vue'
import VueResource from 'vue-resource'
Vue.use(VueResource)

function getCities () {
    return Vue.http({
    method: 'GET',
    url: process.env.base_url + 'cities'
  })
}

export default {
  data () {
    return {
      cities: []
    }
  },

  beforeRouteEnter (to, from, next) {
    getCities((err, cities) => {
      if (err) {
        next(false)
      } else {
        next(vm => {
          vm.cities = cities.data
        })
      }
    }) 
   },
   
   watch: {
     $route () {
       this.cities = []

       getCities((err, cities) => {
         if (err) {
           this.error = err.toString()
         } else {
           this.cities = cities.data
         }
       })
     }
   }

Однако, похоже, это не работает для меня. Я протестировал этот код, и запрос успешно выполнен. Однако результат не возвращается. На данный момент из функции возвращается сам запрос, но я не могу его показать ни в обратном вызове beforeRouteEnter, где он якобы должен назначить его vm.cities, ни в секции watch $route.

Любая помощь/мнение приветствуется.


person Lamarck    schedule 17.01.2017    source источник
comment
Вы когда-нибудь догадывались об этом? Я думаю, что столкнулся с похожей проблемой.   -  person TJ Koblentz    schedule 13.02.2017
comment
К сожалению, пока нет. Все продолжают ссылаться на документацию, но не могут найти решение. В последнее время не пробовал много, но скоро сделаю снова. Буду держать вас в курсе @tjeezy   -  person Lamarck    schedule 13.02.2017
comment
Какие версии vue и vue-router вы используете? Кроме того, вы везде размещали операторы console.log? Вы уверены, что err ложное?   -  person TJ Koblentz    schedule 14.02.2017
comment
Боюсь, это вообще не туда. ни ошибка, ни города не отображаются. Поставил console.logs а он не заходит ни в watch, ни в beforeRouteEnter   -  person Lamarck    schedule 14.02.2017
comment
Можете ли вы показать, как настроена ваша маршрутизация или подключенный экземпляр приложения Vue?   -  person TJ Koblentz    schedule 15.02.2017


Ответы (1)


Метод Vue.http возвращает обещание, поэтому код должен выглядеть так:

beforeRouteEnter (to, from, next) {
  getCities().then(response => {
    next(vm => vm.cities = response.body)
  }
}
person Kees de Kooter    schedule 09.03.2018