我正在尝试根据网址中提供的参数在子路由器中动态生成一些路由。
所以我的主路由器配置了该路由: 正在加载模块的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函数中检索它。
感谢。
答案 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
参数。