2017-01-17 138 views
1

我已經使用這個鏈接作爲參考輸入路徑之前提出請求: https://router.vuejs.org/en/advanced/data-fetching.htmlVue的路由器beforeRouteEnter Vue公司,資源請求

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部分中。

任何幫助/意見表示讚賞。

+0

你有沒有想出解決辦法?我想我遇到了類似的問題。 –

+0

不幸的是,還沒有。每個人都不斷引用我的文檔,但似乎無法找到解決方案。最近沒有嘗試過很多,但很快就會再次嘗試。將讓你張貼@tjeezy – Lamarck

+0

你使用什麼版本的vue和vue-router?另外,你是否把console.log聲明放在了整個?你確定'err'是虛假的? –

回答

0

Vue.http方法返回一個承諾,所以代碼應爲:

beforeRouteEnter (to, from, next) { 
    getCities().then(response => { 
    next(vm => vm.cities = response.body) 
    } 
}