2016-10-07 60 views
0

我想根據url中提供的參數在子路由器中動態生成一些路由。如何在配置子路由器時訪問url參數

所以我必須配置了路線我主路由器: mydomain.com/#/page/ 頁面正在加載的模塊「頁」

在我模塊的網頁我有一個configureRouter功能這是爲了獲取相對於在URL中指定的網頁區段之前在子路由器將它們添加:

public async configureRouter(config, router){ 
    page = ??? 
    sections = wait fetchPageSections(page) 
    //for each section, add route in child router 
} 

我的問題在這裏是如何檢索:頁參數,因爲這將是可用只有(如果我聯合國derstand)在activate()函數中,這將在configureRouter()之後調用。但是,由於這部分路由已經在父路由器中「匹配」,我認爲應該有一種方法在configureRouter函數中檢索它。

謝謝。

回答

1

我不知道是否有辦法檢索configureRouter()方法中的:page參數,因爲據我所知,此時新路由還沒有被觸發。

您可以檢索在created()方法:page參數。

created() { 
    let page = this.router.parentInstruction.params.page; 
    // do something and add routes 
    //this.router.addRoute({ route: "test", moduleId: "test", nav: true, title: "test" }); 
    //this.router.refreshNavigation(); 
} 

第二種選擇是使用全局對象來保存所需的參數。您可以在視圖組件的constructor()方法中注入此對象。但是,這將是一個矯枉過正和不安全的使用。我不認爲這是一個好主意。

第三個選擇,在我看來最簡單的一個,使用mapUnknownRoutes()動態路線:

router.configure(config => { 
    config.mapUnknownRoutes(instruction => { 
    //read the instruction.fragment to get 
    //you can return a promise and make async requests 
    return instruction; 
    }); 
}); 

我希望這有助於!

+0

我實施的解決方案1和3的混合我加載路線在()方法創建(一旦我進入頁面參數)和以前我用mapUnknownRoutes()重定向到一個空的部分,而在航線未加載。 – Nono

1

configureRouter(config, router)傳遞的路由器爲子路由器。幸運的是,它有一個parent屬性,可以爲你提供你想要的東西。

router.parent.currentInstruction.params.page應該給你你在找什麼:從父路由器page參數。

+0

我試過,但不幸的是,當進入子模塊的configureRouter功能時,父路由器的當前指令仍然爲空......我認爲它只在調用激活功能之前設置... – Nono

+0

它對我來說很有效。我會創建一個要顯示你:-) –

相關問題