我可以从角度应用程序中找到以下路径(通过单击具有routerLink的产品链接):
{basePath}/product/trek-monda-slr-frameset-(h2-fit)-2016
然而,一旦我刷新页面,角度会在控制台中抛出错误,并且不会提供页面:
Uncaught (in promise): Error: Cannot match any routes. URL Segment: 'h2-fit'
我的猜测是角度路由器不允许使用括号。但是,对于大多数浏览器,网址中的有效字符是否都没有?
为什么没有Angular允许这个?
答案 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
});