[使用Angular 8,我创建了一个“登录回调”页面,该页面应(通过链接或自动)重定向到上一页。但是上一页可以包含一些辅助路由。
因此,为避免导航页面“完全重载”,我尝试在模板中使用[routerLink]来构建“转到上一页”按钮和“ this.router.navigate(...)”如果要以编程方式重定向,则在控制器内部。
问题是:看来Angular无法正确序列化辅助路由(带括号)
示例:
Controller:
constructor(private router: Router){}
public redirectRoute: string;
onInit() {
this.redirectRoute = '/home(modal:modal/secondary);param1=value1';
}
模板:
<a [routerLink]="redirectRoute">Go to previous page</a>
构建的URL序列化括号,(变为%28,而)变为%29。因此导航失败,无法识别路线,并且回退到默认路线。
实际上,“ redirectRoute”是动态的,因此我不会寻找“直接在模板中构建redirectRoute”之类的答案。当然可以,但是我不能。
我尝试了很多事情;我可以解析URL(使用this.router.parseUrl(rawRedirectUrl);
),它返回一个好的URLTree(辅助路由格式正确),但是我找不到如何在[routerLink]标记中使用URLTree。
如果我想使用this.router.navigate(this.redirectRoute)
重定向,则发生了同样的事情...
如何正确重定向而不重新加载所有页面?
谢谢!
[编辑]
路由器链接也接受网址树。
正在执行以下操作:
<a [routerLink]="[ '/home', {param: 123 } ]">Home</a>
将生成链接'/ home; param = 123'。
此处为示例:https://stackblitz.com/edit/angular-qcpcoy
stackblitz示例在两个组件之间路由。我正在使用上述语法构造链接,然后通过注入的ActivatedRoute
读取将参数记录到控制台的信息。
constructor(private route: ActivatedRoute) {
}
ngOnInit(): void {
console.log(this.route.snapshot.params['param']);
}