配置子路由器时如何访问url参数

时间:2016-10-07 05:18:52

标签: aurelia aurelia-router

我正在尝试根据网址中提供的参数在子路由器中动态生成一些路由。

所以我的主路由器配置了该路由: 正在加载模块的mydomain.com /#/ page / :page " page"

在我的模块页面中,我有一个configureRouter函数,它应该获取相对于url中指定页面的部分,然后将它们添加到子路由器中:

public async configureRouter(config, router){
    page = ???
    sections = wait fetchPageSections(page)
    //for each section, add route in child router
}

我的问题是如何检索:page 参数,因为这将在activate()函数中可用(如果我理解的话),将在configureRouter()之后调用。但是,由于路线的那部分已经匹配了#34;在父路由器中,我认为应该有一种方法可以在configureRouter函数中检索它。

感谢。

2 个答案:

答案 0 :(得分:1)

我不知道是否有办法在:page方法中检索configureRouter()参数,因为据我所知,此时尚未触发新路由。

您可以在:page方法中检索created()参数。

created() {
   let page = this.router.parentInstruction.params.page;
   // do something and add routes
   //this.router.addRoute({ route: "test", moduleId: "test", nav: true, title: "test" });
   //this.router.refreshNavigation();
}

第二个选项是使用全局对象来保存所需的参数。您可以在视图组件的constructor()方法中注入此对象。但是,这将是一种过度使用并且不安全。我认为这不是一个好主意。

第三种选择,在我看来最简单的选择是使用mapUnknownRoutes()作为动态路线:

router.configure(config => {
  config.mapUnknownRoutes(instruction => {
     //read the instruction.fragment to get
     //you can return a promise and make async requests
     return instruction;
   });
});

我希望这有帮助!

答案 1 :(得分:1)

您在configureRouter(config, router)中传递的路由器是子路由器。幸运的是,它有一个parent属性,可以为你提供你想要的东西。

router.parent.currentInstruction.params.page应该为您提供您正在寻找的内容:来自父路由器的page参数。