Дочерний маршрутизатор Aurelia не проходит через конвейер основного маршрутизатора

#aurelia

#аурелия #aurelia

Вопрос:

Конвейер основного маршрутизатора моего приложения перенаправляет на страницу входа, если пользователь не вошел в систему.

Он отлично работает для большинства страниц, но когда указанная страница содержит дочерний маршрутизатор, логика, похоже, не попадает в конвейер основного маршрутизатора, предотвращая перенаправление (а также не отображая страницу).).

главный маршрутизатор:

 configureRouter (rc: RouterConfiguration, router: Router) {
    this.router = router;

    rc.addAuthorizeStep(this.requireAuth);

    const auth = { authenticated: true, needsCurrentOrg: true };

    const loginRoute = {
      route: 'login/:token?',
      name: 'login',
      moduleId: PLATFORM.moduleName('views/login/login'),
    };

    rc.map([
      {
        route: [ROOT_PAGE, DASHBOARD_PAGE],
        name: DASHBOARD_PAGE,
        moduleId: PLATFORM.moduleName('views/dashboard/dashboard'),
        settings: auth
      },
      {
        route: CREDENTIALS_PAGE,
        name: CREDENTIALS_PAGE,
        moduleId: PLATFORM.moduleName('views/credentials/credentials-root'),
        settings: auth
      })]
}
  

учетные данные маршрутизатора:

 configureRouter (rc: RouterConfiguration) {
    rc.map([
      {
        route: '',
        name: 'credentials-list',
        moduleId: PLATFORM.moduleName('./credentials-grid'),
      }
    ]);
  }
  

Поэтому, если я нажимаю /#/dashboard без входа в систему, я перенаправляюсь на /login , но ничего не происходит, если я нажимаю /#/credentials : пустая страница, перенаправления нет. Я вставил a debugger в requireAuth код промежуточного продукта, и в первом случае он включается, во втором случае он не проходит

Ответ №1:

Наконец-то выявлена проблема, по некоторым причинам похоже, что LoadRouteStep этап конвейера (внутренний для AppRouter ) пытался загрузить ViewModel целевого маршрутизатора subrouter.

Поскольку у этой ViewModel был некоторый код в конструкторе, этот код терпел неудачу, создавая ошибку и останавливая конвейер, так и не достигнув перенаправления.

Исправление состояло в том, чтобы переместить этот код конструктора в activate функцию для ViewModel.

Комментарии:

1. Я думаю, это как-то связано с тем фактом, что вы используете пустой маршрут для списка учетных данных. Вы можете это проверить?