我试图从组件更新(添加,删除)queryParams . 在angularJS中,它曾经有可能归功于:
$location.search('f', 'filters[]'); // setter
$location.search()['filters[]']; // getter
我有一个应用程序,其中包含用户可以过滤,订购等的列表,我想在URL的queryParams中设置所有已激活的过滤器,以便他可以复制/粘贴URL或与其他人共享 .
但是,每次选择过滤器时都会 I don't want my page to be reloaded .
这可以用新的路由器吗?
6 回答
您可以使用新的查询参数导航到当前路径,这不会重新加载您的页面,但会更新查询参数 .
像(在组件中)的东西:
请注意,虽然它赢得了't reload the page, it will push a new entry to the browser'的历史 . 如果要在历史记录中替换它而不是在那里添加新值,可以使用
{ queryParams: queryParams, replaceUrl: true }
.编辑:正如评论中已经指出的那样,
[]
和relativeTo
属性在我的原始示例中缺失,因此它也可以更改路径,而不仅仅是查询参数 . 在这种情况下,正确使用this.router.navigate
:将新参数值设置为
null
将从URL中删除参数 .@RadosławRoszkowiak的回答几乎是正确的,除了
relativeTo: this.route
如下所示:在Angular 5中,您可以通过解析当前URL轻松获取和修改urlTree的副本 . 这将包括查询参数和片段 .
修改查询参数的"correct way"可能与下面的createUrlTree一样,从当前创建新的UrlTree,同时让我们使用NavigationExtras修改它 .
要以这种方式删除查询参数,您可以将其设置为
undefined
或null
.如果要更改查询参数而不更改路径 . 看下面的例子可能对你有所帮助:当前路线是: /search &目标路线是(没有重装页面): /search?query=love
请注意:您可以使用 this.router.navigate( ['search'] 而不是 this.router.navigate( ['.']
首先,我们需要从角度路由器导入路由器模块并声明其别名
1.您可以使用“router.navigate”函数更改查询参数,并传递查询参数
它将更新当前即激活路径中的查询参数
this.router.navigate(['/ abc'],{queryParams:{_ id:“abc”,day:“1”,name:“dfd”}});
它将更新“abc”路径中的查询参数以及三个查询参数
用于获取查询参数: -
尝试
this.router.navigate([], { queryParams: { query: value } });
将用于除单引号之外的相同路线导航 .