繁体   English   中英

Aurelia setRoot在主页中有效,但在子页面中无效

[英]Aurelia setRoot works when in homepage but not in a child page

摘要:
作品
1)登录
2)使用test1按钮和注销按钮查看主页
3)按登出
4)退出并进入登录页面

不工作
1)登录
2)使用test1按钮和注销按钮查看主页
3)按test1
4)进入test1页面
5)按登出
错误[应用程序路由器]错误:找不到路由:/ test1

我已经将代码缩减到我正在苦苦挣扎的部分,并制作了一个punker,但是punker不喜欢我正在使用的inject标签,因此无法渲染。 但是,您仍然可以看到代码布局(如果任何人都可以解决很棒的注入问题)。
塞子: http ://embed.plnkr.co/V5IoGqDfmo1djd3kW6bZ/

这个想法是,进入模块只有一个只有两条路由的路由器-登录和密码重置(与从plunker中重置密码无关)。 当用户登录时,我们将根目录设置为应用程序,该应用程序具有另一个路由器,只有登录的人才能访问。

登录后,按注销按钮将破坏会话并将根重新设置为条目。

但是,如果用户登录,单击应用程序路由器中的一个模块(例如test1),然后单击注销,我们将收到错误: ERROR [app-router]错误:找不到路由:/ test1

我试过了:
1)在设置根目录之前重置路由器(即this.router.reset())
2)在设置为root之前导航到主页(即this.router.navigate(''))
3)这里建议的答案:
重置根目录时Aurelia路由器不起作用
4)这里建议的答案:
使用setRoot切换到其他应用时,Aurelia清除路由历史记录
任何建议将不胜感激,如果代码从根本上不起作用,我很高兴对代码进行重组。

我不确定,但是我认为这是一个以前修复的错误,但由于某种原因,现在又回来了。 我会尝试调查。

作为解决方案,您可以在两个路由器中都使用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 :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM