我希望在Angular 2应用中路由时禁用更改网址。
我知道skipLocationChange: true
必须作为NavigationExtras
参数传递给路由器。
我的问题是:
我尝试过:
<h1>
{{title}}
</h1>
<ul>
<li><a [routerLink]="['route1', { skipLocationChange: true }]">Route1</a></li>
<li><a [routerLink]="['route2', { skipLocationChange: true }]">Route2</a></li>
</ul>
<router-outlet></router-outlet>
但它不起作用。
点击链接后,路线将更改为http://localhost:4200/route2;skipLocationChange=true
我不想在我的控制器中使用this.router.navigate(['route1], {skipLocationChange: true)
,因为我失去了routerLinkAtive
突出显示。
答案 0 :(得分:16)
没有办法(现在和afaik)同时拥有 routerLinkActive
和skipLocationChange
并期望你想要的结果。根据{{3}},您可以添加选项,但没有skipLocationChange
选项。
但是,您可以将路由器中的NavigationExtras
与api结合使用,并根据该链接是否应该处于活动状态
<强>更新强>
从2.3.0-beta.0
开始,您可以将skipLocationChange
选项添加到routerLink
指令中:
<li><a [routerLink]="['route1']" skipLocationChange>Route1</a></li>
答案 1 :(得分:6)
您可以在routerLink标记本身上提供任何NavigationExtras属性作为单独的属性。
<a [routerLink]="['/user/bob']" [queryParams]="{debug: true}" fragment="education">
link to user component
</a>
RouterLink属性上的documentation 很清楚。
答案 2 :(得分:0)
skipLocationChange
属性默认为false
。它将确保在浏览器中显示导航URL。如果我们要隐藏导航网址,则应将skipLocationChange
属性设置为true
。
可以通过两种方式实现。
skipLocationChange
属性的对象传递到路由器对象引用,如下所述:this.router.navigateByUrl('/ someUrlPath',{skipLocationChange:true});
这应该在.ts文件中
将skipLocationChange
指令应用于普通HTML锚标记,如下所示: