Angular 2中是否可以根据查询参数定义路由? 我想要有以下行为:
如果用户输入了网址http:<server-path>/search
,我想要转到StartPage
组件。
如果用户输入了网址http:<server-path>/search?query=sometext
,我想要路由到ResultList
组件。
我知道可以使用路径参数进行路由,但这不是我喜欢做的事情。我想尽可能使用查询参数。 我知道如何使用查询参数触发角度导航,但我不知道如何配置路由。
答案 0 :(得分:9)
因此,您无法使用查询字符串定义path
,但您可以使用路由matcher
来确定何时路由到ResultList
组件。您可以在search
的默认路由定义之上定义它,这样如果匹配失败,它将默认为没有查询字符串的搜索路由。
{
component: ResultListComponent,
matcher: (url: UrlSegment[]) => {
console.log(url);
return url.length === 1 && url[0].path.indexOf('search?query=') > -1 ? ({consumed: url}) : null;
}
},
{
path: 'search',
component: SearchComponent,
}
答案 1 :(得分:3)
在下面的代码中,我将展示如何跨任何路径传递查询字符串参数。
假设我们想要以下网址:
http://localhost:4200/myUrl?QueryParamEx=2258
在构造函数中注入ROUTER依赖项
constructor(...private router: Router..){...}
导航功能将允许我们导航到前面的网址
goMyUrl() {
this.router.navigate(['/myUrl'], { queryParams: { QueryParamEx: '2258' } });
}
答案 2 :(得分:0)
你也可以这样设置:
<强>路线:强>
{ path: 'server-path/:id', component: ResultListComponent },
{ path: 'server-path', component: serverPathComponent },
<强> ResultListComponent 强>
queryParam: string;
ngOnInit() {
this.route.params.forEach((params: Params) => {
this.queryParam = params['id'];
});
}
您可以使用该queryParam调用您需要执行的任何功能或任何操作。
有关查询参数的更多信息,请参阅Routing & Navigation guide