Aurelia setRoot работает, когда на домашней странице, но не на дочерней странице
Резюме:
РАБОТАЕТ
1) войти в систему
2) см. Главную страницу с кнопкой test1 и кнопкой выхода
3) нажмите выйти
4) выйти из системы и попасть на страницу входа
НЕ РАБОТАЕТ
1) войти в систему
2) см. Главную страницу с кнопкой test1 и кнопкой выхода
3) нажмите test1
4) попасть на страницу test1
5) нажмите выйти
ОШИБКА [app-router] Ошибка: маршрут не найден: /test1
Я сократил свой код до части, с которой я борюсь, и создал плункер, но ОДНАКО плункеру не нравится тег ввода, который я использую, и поэтому он не рендерится. Тем не менее, вы все еще можете видеть макет кода (если кто-то может решить проблему с внедрением, что было бы здорово).
plunker: http://embed.plnkr.co/V5IoGqDfmo1djd3kW6bZ/
Идея состоит в том, что у модуля входа есть маршрутизатор с двумя маршрутами - вход в систему и сброс пароля (сброс пароля из плункера считается несущественным). Когда пользователь входит в систему, мы устанавливаем рут для приложения, у которого есть другой маршрутизатор, к которому может получить доступ только тот, кто вошел в систему.
После входа в систему нажатие кнопки выхода из системы приведет к уничтожению сеанса и сбросу входа root.
Однако, если пользователь входит в систему, нажимает на один из модулей в маршрутизаторе приложения (например, test1), ТОГДА нажимает кнопку "Выйти из системы", мы получаем ошибку: ОШИБКА [app-router] Ошибка: маршрут не найден: /test1
Я пробовал:
1) сброс роутера перед установкой рута (т.е. this.router.reset ())
2) переход к дому перед установкой root (то есть this.router.navigate (''))
3) ответы, предложенные здесь:
Роутер Aurelia не работает при сбросе рута
4) ответы, предложенные здесь:
Aurelia очищает историю маршрутов при переключении на другое приложение с помощью setRoot
Буду признателен за любые предложения, я с удовольствием реструктурирую код, если он принципиально не будет работать.
1 ответ
Я не уверен, но я думаю, что это ошибка, которая была исправлена в прошлом, но по какой-то причине она вернулась сейчас. Я постараюсь расследовать.
В качестве решения вы могли бы использовать mapUnknownRoutes
в обоих роутерах перенаправить пользователя на нужный маршрут. Например:
Вход Маршрутизатор
configureRouter(config, router) {
config.title = "Super Secret Project";
config.map([
{ route: ["","login"], name: 'login', moduleId: "./login", nav: true, title: "Beginscherm" },
]);
this.router = router;
//default route, to avoid the "route not found error"
config.mapUnknownRoutes(instruction => {
return './login';
});
}
Авторизованный маршрутизатор
configureRouter(config, router) {
config.title = "Super Secret Project";
config.map([
{ route: [ '', 'screen-1'], moduleId: "./screen-1", nav: true, title: "Beginscherm" },
{ route: 'screen-2', name:'screen-2', moduleId: "./screen-2", nav: true, title: "Beginscherm" }
]);
//default route, to avoid "route not found" error
config.mapUnknownRoutes(instruction => {
return './screen-1';
});
this.router = router;
}
Пример выполнения https://gist.run/?id=c3990aa3a5cbe22dc05bce2fdda0269a
Пожалуйста, не используйте Plunker, это очень медленно. Используйте вместо этого GistRun:)