总结:
WORKS
1)登录
2)查看带有test1按钮的主页面和注销按钮
3)按下注销
4)注销并进入登录页面
不工作
1)登录
2)查看带有test1按钮的主页面和注销按钮
3)按test1
4)进入test1页面
5)按下注销
错误[app-router]错误:未找到路由:/ test1
我已经将我的代码减少到了我正在努力的位置并且成了一个东西,但是我不喜欢我正在使用的注入标签,因此不会渲染。你仍然可以看到代码布局(如果有人能解决注入问题那将是非常棒的)。
plunker:http://embed.plnkr.co/V5IoGqDfmo1djd3kW6bZ/
这个想法是入口模块有一个只有两条路由的路由器 - 登录和密码重置(将密码重置为plunker无关紧要)。当用户登录时,我们将根设置为应用程序,该应用程序具有另一个只有登录用户才能访问的路由器。
登录后,按下注销按钮将破坏会话并重置根目录。
但是,如果用户登录,点击应用程序路由器中的一个模块(例如test1),然后点击退出,我们收到错误:错误[app-router]错误:找不到路由:/ test1
我试过了:
1)在设置root之前重置路由器(即this.router.reset())
2)在设置为root之前导航到home(即this.router.navigate(''))
3)这里建议的答案:
Aurelia router not working when resetting root
4)这里建议的答案:
Aurelia clear route history when switching to other app using setRoot
任何建议都会受到赞赏,我很乐意重新构建代码,如果它从根本上不起作用。
答案 0 :(得分:0)
我不确定,但我认为这是一个过去修复的错误,但由于某种原因它现在又回来了。我会尝试调查。
作为解决方案,您可以在两个路由器中使用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:)