Aurelia setRoot在主页中工作但不在子页面

时间:2016-10-13 14:51:57

标签: javascript router aurelia aurelia-router aurelia-navigation

总结:
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
任何建议都会受到赞赏,我很乐意重新构建代码,如果它从根本上不起作用。

1 个答案:

答案 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:)