2016-11-11 3 views
0

У меня проблема с дочерними маршрутизаторами/маршрутами. (Сокращенный пример ниже.)Детский маршрут не найден при перенаправлении, но работает нормально, иначе

app.ts

config.map([ 
    { route: "auth", name: "auth", moduleId: "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», заключается в том, что этот маршрут не существует на маршрутизаторе приложений. Есть, вероятно, другие способы сделать это, но способ, который я дал, является самым простым. –

Смежные вопросы