Angular2 RouterLink 通过用 %2F 替换斜杠来中断路由

Angular2 RouterLink breaks routes by replacing slash with %2F

从最新的 Angular2 版本 (2.0.0-beta.14) 开始,查询参数可以包含多个斜杠,例如 /foo/bar.

这很好用,但是每当我在 RouterLink link 中使用带有多个斜杠的参数时,它会用 %2F 转义 / 导致路由在重新加载时不再工作.

我的 link 看起来像这样:<a [routerLink]="['/Page', {page: page.url | slug}]" class="list-group-item">{{ page.title }}</a>

在 'slug' 管道内,我什至 URIDecode 字符串,当我记录它时它是正确的。它会记录类似 /pages/level-1/ 的内容,但是当我检查页面上的实际 a 标签时,它会显示 href="/pages%2Flevel-1".

我很无能,因为即使我在我的 HTML 模板中打印 {{ page.url | slug }} 的值,它 returns url 带有斜杠。

因此,由于 Github 上的 Angular2 问题页面,我找到了解决方案(感谢 Günter!)。

我的路线是这样配置的:

({ 
    path: "/:page",
    component: Page,
    name: "Page"
}),

但应该是

({
    path: "/*page",
    component: Page,
    name: "Page"
}),

区别是page前面的*通配符。

我创造了this issue

如果路径类似于

pathServedByTheController = 'foo/bar'

然后在视图中我可以做类似

的事情
<my-button (click)="onEmitCta()" [routerLink]="['/'].concat(pathServedByTheController.split('/')).concat('')" class="banner-cta inverse shadow">NAVIGATE</my-button>

这很适合我!

我们没有尝试在 routerLink 中使用带斜杠的字符串,而是让路由器在组件中处理它。

<a (click)="goToPage(url)">Link</a>
url = 'group/8';

goToPage(url) {
    this.router.navigateByUrl(url);
}

如果您使用 Angular 7 或更高版本,而其他答案不适合您,则您的路径可能存在一些问题。

如果您定义一个包含多个斜线的路径,它会起作用。但是,在处理翻译时,我遇到了错误。

[{
  path: 'parentX',
  children: [
   {
     path: 'y/z'
     component: AnyComponent
   }
  ]
}]

所有功劳归功于 Dabbas 的问题并且 answer

我花了一段时间才找到他的解决方案,这就是我将其添加到此处的原因。

[{
  path: 'parentX',
  children: [
   {
     path: 'y',
     children: [
       {
        path: 'z',
        component: AnyComponent
       }
     ]
   }
  ]
}]

您需要像这样用 (+) 替换逗号 (,)

Wrong => <a [routerLink]="['/Page', page.url]" class="list-group-item">{{ page.title }}</a>
Right => <a [routerLink]="['/Page' + page.url]" class="list-group-item">{{ page.title }}</a>