基于查询参数的Angular 2路由

Man*_*uky 7 routing angular

在Angular 2中是否可以根据查询参数定义路由?我想要有以下行为:

如果用户输入了http:<server-path>/search我想要路由到StartPage组件的URL .

如果用户输入http:<server-path>/search?query=sometext我想要路由到ResultList组件的URL .

我知道可以使用路径参数进行路由,但这不是我喜欢做的.我想尽可能使用查询参数.我知道如何使用查询参数触发角度导航,但我不知道如何配置路由.

Ted*_*rne 9

因此,您无法在其中定义path带有查询字符串的a,但您可以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,
}
Run Code Online (Sandbox Code Playgroud)

演示

  • 在您的示例中,您实际上并未使用查询参数,而是将"query = example"包含在路径中.编码后的实际url是`/ search%3Fquery%3Dexample`而不是`/ search?query = example`.因此,您的答案不回答原始问题. (2认同)
  • 在Angular 5中,没有查询字符串到达​​path属性。但是,您仍然可以使用window.location.href作为后备。如果没有更好的主意... (2认同)