2016-11-11 48 views
0

我遇到了有關子路由器/路由的問題。 (縮寫下面的例子。)重定向到時沒有找到子路由,但工作正常否則

app.ts

config.map([ 
    { route: "auth", name: "auth", moduleId: "auth" } 
]); 

AUTH/index.ts

config.map([ 
    { route: "", redirect: "login" }, 
    { route: "login", name: "login", moduleId: "./login", title: "Login" } 
]); 

認證step.ts

run(navigationInstruction, next) { 
    if (navigationInstruction.getAllInstructions().some(i => i.config.auth)) { 
     if (!this.authContext.isAuthenticated()) 
      return next.cancel(this.router.navigateToRoute('auth/login', { return: true })); 
    } 

    return next(); 
} 

如果請求安全路由,我有一個AuthenticationStep,它將重定向到auth/login。例如,如果我嘗試去一條安全路線(例如admin/something),那麼這是行不通的,我得到下面的錯誤。但是,如果我直接導​​航到auth/login,登錄頁面顯示正確。

無法找到名爲'auth/login'的路由。

回答

2

一個重定向添加一個空的路線,你的孩子路由器的配置:

{ route: '', redirect: 'login' } 

然後,改變你對navigateToRoute電話導航到auth

run(navigationInstruction, next) { 
    if (navigationInstruction.getAllInstructions().some(i => i.config.auth)) { 
     if (!this.authContext.isAuthenticated()) 
      return next.cancel(this.router.navigateToRoute('auth', { return: true })); 
    } 

    return next(); 
} 
+0

我確實已經有一個重定向路由,對不起,我沒有在示例中包含它。我不想導航到'auth',因爲我想知道爲什麼它不能直接重定向到'auth/login'。謝謝! –

+0

(我確實暫時放了這個修復程序,但它仍然有效,但仍想知道_why_) –

+1

您無法使用主應用程序路由器導航到'auth/login'的原因是因爲該路線不存在在應用路由器上。可能還有其他方法可以實現這一點,但我給出的方式是最簡單的。 –

相關問題