【发布时间】:2017-01-16 23:31:33
【问题描述】:
我在/contacts 注册了一个组件,它显示了一个联系人列表。我添加了一个<input [value]="searchString"> 用于过滤显示的列表。
现在我想在 URL 中以查询参数的形式显示 searchString。 (使用新路由器 3.0.0 RC2)
官方文档 (https://angular.io/docs/ts/latest/guide/router.html#!#query-parameters) 展示了如何使用 router.navigate 更改 queryParams。但这似乎很尴尬,因为我只想更改queryParams,而不必知道我目前在哪条路线:router.navigate(['/contacts'], {queryParams:{foo:42}})
(我知道如果我只是更改queryParams,它不会重新加载组件,但这仍然感觉不合适)
经过一些尝试,我发现router.navigate([], {queryParams:{foo:42}}) 有效。这样感觉好多了。
但我仍然不确定这是否是正确的方法。或者如果我错过了一些方法。
如何更改您的queryParams?
【问题讨论】:
-
那么,如何将搜索查询放在路由参数中,例如您的路由器文件中的
/contacts/:search-query,并在您的组件中观察它的变化? -
这会有什么不同吗?我也可以观察到
queryParams,这不是问题。...我目前的组件有大约20个搜索参数,大部分是可选的,有些是相互排斥的。当用户更改任何参数时,显示的列表将被过滤,另外我想在 URL 中反映这些参数更改。...问题只是关于“设置queryParams的正确方法是什么?” 或“router.navigate([], ...)是唯一/正确的方法吗?”跨度> -
感谢您的回答,它帮助了我。我现在也使用 router.navigate([], { queryParams: { ... }})。