[英]How can Vue router get current route path of lazy-loaded modules on page load?
我有一個帶有路由器的 vue 應用程序,如下所示:
import index from './components/index.vue';
import http404 from './components/http404.vue';
// module lazy-loading
const panda= () => import(/* webpackChunkName: "group-panda" */ "./components/panda/panda.vue");
// ...
export const appRoute = [
{
path: "",
name: "root",
redirect: '/index'
},
{
path: "/index",
name: "index",
component: index
},
{
path: "/panda",
name: "panda",
component: panda
},
//...
{
path: "**",
name: "http404",
component: http404
}
];
所以panda模塊是延遲加載的。 但是,當我導航到panda
頁面時, App.vue
的mounted()
生命周期中this.$route.path
的 console.log() 只輸出
“/”
代替
“/熊貓”
但是索引頁面運行良好,它顯示准確
“/索引”
正如預期的那樣。
那么,當頁面最初加載時,Vue 路由器如何正確獲取延遲加載頁面的當前路徑? 我錯過了什么?
編輯:
但是,它可以在 Webpack 熱重載后捕獲正確的路徑。 它在第一次訪問panda
捕獲“/”,但是在我更改源代碼中的某些內容后,webpack-dev-server hot-reloads,然后它得到“/panda”。
所以我想這與 Vue 生命周期有關。
有一個currentRoute
屬性對我this.$router.currentRoute
: this.$router.currentRoute
使用this.$route.path
。 簡單有效。
使用
this.$route.path
獲取當前路由路徑
<navigation v-if="showNavigation"></navigation>
data() {
this.$route.path === '/' ? this.showNavigation = false : this.showNavigation = true
}
如果您有類似的問題,正確的答案是使用 router.onReady 然后調用有關路徑的邏輯。 在官方 Vue 路由器文檔下方:
router.onReady
簽名:
router.onReady(callback, [errorCallback])
當路由器完成初始導航時,此方法將要調用的回調排隊,這意味着它已解析與初始路由關聯的所有異步輸入鈎子和異步組件。
這在服務器端渲染中很有用,可確保服務器和客戶端上的輸出一致。
第二個參數 errorCallback 僅在 2.4+ 中受支持。 當初始路由解析遇到錯誤(例如無法解析異步組件)時,它將被調用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.