我想禁用网址编码.
当我在下面使用这个.
this.router.navigate(['/profile', { tags: 'one,two' }]);
Run Code Online (Sandbox Code Playgroud)
网址是这样的
http://localhost:4200/profile;tags=one%2Ctwo
Run Code Online (Sandbox Code Playgroud)
我希望它非常像下面
http://localhost:4200/profile;tags=one,two
Run Code Online (Sandbox Code Playgroud)
有没有办法禁用网址编码?
我正在使用Angular 2路由器更新搜索应用程序的URL中的查询参数.我试图用+符号替换查询中的空格.但是,+符号正在编码.例如:
this.router.navigatebyUrl('?q=one+two');
Run Code Online (Sandbox Code Playgroud)
使用"?q = 1%2Btwo"填充URL.
在查看Angular 2的源代码时,看起来路由器将URL转换为UrlTree ,它使用encodeURIComponent()对url进行编码.因此,不可能阻止默认编码.
我目前的过程是通过如上所示执行navigateByUrl来更改路径,然后通过以下方式侦听更改:
this.routeSubscription = this.route.queryParams.subscribe((params: any) => {
this.term = (params.q ? params.q : '');
});
Run Code Online (Sandbox Code Playgroud)
是否有另一种方法来处理查询参数,这些参数允许我使用自己的策略进行网址编码?
我目前的配置:
const routes: Routes = [
{ path: '', component: NavComponent, outlet: 'nav' }, // (1)
{ path: '**', component: NavComponent, outlet: 'nav' } // (2)
];
Run Code Online (Sandbox Code Playgroud)
有用.NavComponent总是呈现出口nav.特别是,它适用于以下所有类型的URL:
http://example.com/foo(nav:bar) // (a) non-empty path in nav --> (2)
http://example.com/foo(nav:) // (b) empty path in nav --> (2)
http://example.com/foo // (c) no nav at all --> (1)
Run Code Online (Sandbox Code Playgroud)
请注意,路由器匹配到这些URL的不同路由:
(1) 是用来 (c)(2)用于(a)和(b)这就是为什么NavComponent实例被破坏并重新创建每个位置的变化,从说时间(c)到(a).这是我需要防止的事情.我需要保留我的实例,因为它的状态,动画等等.据我所知,只有在所有URL使用相同的路由时才有可能,但是我找不到这样做的方法.如果我删除(1),喜欢的URL (c)停止显示NavComponent …