括号在页面刷新时中断Angular路由

时间:2017-02-16 19:04:47

标签: angular angular2-routing

我可以从角度应用程序中找到以下路径(通过单击具有routerLink的产品链接):

{basePath}/product/trek-monda-slr-frameset-(h2-fit)-2016

然而,一旦我刷新页面,角度会在控制台中抛出错误,并且不会提供页面:

Uncaught (in promise): Error: Cannot match any routes. URL Segment: 'h2-fit'

我的猜测是角度路由器不允许使用括号。但是,对于大多数浏览器,网址中的有效字符是否都没有?

为什么没有Angular允许这个?

2 个答案:

答案 0 :(得分:1)

我知道这不是最有帮助的,但看起来Angular的github上存在一个与此问题相关的漏洞:

https://github.com/angular/angular/issues/10280

如果您对这些括号进行了硬编码,那么您可以像这样评论说并替换它们。 https://github.com/angular/angular/issues/10280#issuecomment-279784004

答案 1 :(得分:0)

在使用以下内容时,我在刷新或向后导航时遇到相同的问题:

this.location.replaceState(`/portfolio/${this.activePortfolioId}/${this.activePortfolioName}/${user.id}`);  

在上面的代码中,如果我的投资组合名称包含“( someText )”,我将遇到此问题。 @ Stout01提供的链接帮助我解决了这个问题。

初始代码:

this.router.navigate(['portfolio', portfolio.id, portfolio.name], {
  relativeTo: this.route
});

固定代码:

var cleanPortfolioName = portfolio.name.replace(/[!'()*]/g,'');

this.router.navigate(['portfolio', portfolio.id, cleanPortfolioName], {
  relativeTo: this.route
});