2017-01-26 35 views
4

我搜查了很多,但沒有明確的答案。基本上,突變後自動改變路線最好的做法是什麼?突變後改變路線(VueRouter)的最佳做法(Vuex)

例:我點擊一個按鈕來登錄() - >動作登錄,使HTTP調用 - >突變LOGIN_SUCCESSFUL - >我想將用戶重定向到主頁$router.go()

  • 我應該換Promise中的動作,然後監聽結果以調用組件中的路由更改?

  • 我應該直接從$store那裏做嗎?

  • 請問vuex-router-sync有幫助嗎?

非常感謝!

回答

1

這個問題的答案似乎在Vue社區中有些不清楚。

大多數人(包括我)都會說商店的變異除了實際變更商店之外不應該有任何影響。因此,應該避免在$store中直接進行路由更改。

我非常喜歡你的第一個建議:將承諾中的行動包裝起來,並在承諾解決後立即改變承諾組件的路線。

第三種解決方案是在組件中使用watch,以便在您的LOGGED_IN_USER狀態(或其他任何您稱之爲)發生更改時立即更改路由。雖然這種方法可以讓你的行動和突變保持100%的清潔,但我發現它非常迅速地變得混亂。

因此,我會建議走承諾路線。

0

將一個事件監聽器放到你的app.vue文件中,然後通過你的變異函數發出en事件。但我建議你在包裹承諾的行動是好辦法

App.vue:

import EventBus from './eventBus'; 

methods: { 
    redirectURL(path) { 
     this.$router.go(path)} 
    }, 

created() { 
    EventBus.$on('redirect', this.redirectURL) 
} 

突變:

import EventBus from './eventBus'; 

LOGIN_SUCCESSFUL() { 
    state.blabla = "blabla"; 
    EventBus.$emit('redirect', '/dashboard') 

}