【问题标题】:Angular navigate to url by replacing an existing parameterAngular 通过替换现有参数导航到 url
【发布时间】:2017-07-06 01:39:46
【问题描述】:

在我们的 Angular 应用程序中,我们有一个 DropDown 组件,其中填充了年份。

一旦我们选择了一年,我们需要改变路由器的 url,就像这样:

网址/客户/2015

网址/客户/2016

网址/客户/2017

url/customers/some-other-page/2015

url/customers/some-other-page/2016

url/customers/some-other-page/2017

这可行,但我们将下拉菜单的更改事件委托给需要它的组件。没关系!

但我们认为,如果组件自己改变路线,这会让我们的生活更轻松。

我们试过了:

  public onChange(year): void {   
    this.router.([this.router.url, year]);
  }

这仅在第一次有效,第二次网址看起来像这样:

url/customers/some-other-page/2017/2018

第三次:

url/customers/some-other-page/2017/2018/2019

等等……

问题:

那么,如何获取我的路由器的参数并将其替换为当前参数?

【问题讨论】:

  • 你使用的是相对路由,使用绝对路由this.router.(['/customers', 'some-other-page', year]);注意/customers
  • 这不是真正的重复。我检查了链接...我需要从我的DropDownComponent 导航,所以我必须获取我当前的 url 并附加 DropDown 的新选择值
  • 能否将年份作为查询参数而不是必需参数?然后您可以只更改查询参数部分而不更改“基本”路由。
  • 这就是我想要做的 :) 似乎这可以与 QueryParameter @DeborahK 一起使用,我现在只是在查看文档以了解如何替换 url 参数重写整个url

标签: angular


【解决方案1】:

以下是有关使用查询参数的一些信息:

然后您可以使用如下语法读取查询参数:

ngOnInit(): void {
    this.listFilter = this.route.snapshot.queryParamMap.get('filterBy') || '';
    this.showImage = this.route.snapshot.queryParamMap.get('showImage') === 'true';
    . . .
}

或者如果您想在查询参数更改时收到通知,您可以执行以下操作:

ngOnInit(): void {
    this.route.queryParamMap.subscribe(params => this.filterBy = params.get('filterBy'));
    . . .
}

注意:来自文档:

两个较旧的属性仍然可用。他们的能力不如 它们的替代品,不鼓励使用,并且将来可能会被弃用 角度版本。

params — 一个包含必需和可选参数的 Observable 特定于路由的参数。请改用 paramMap。

queryParams — 一个包含查询参数的 Observable 可用于所有路线。请改用 queryParamMap。

【讨论】:

  • 我的解决方案只是像这样导航:this.router.navigate([], { queryParams: { year: value } , relativeTo: this.activatedRoute });。感谢您的意见,肯定真的很有帮助。
  • this.activatedRoute.queryParams.subscribe(params => { this.selectedYear = Number(params["year"]) || years[0]; this.getCustomersByYear(this.selectedYear); } );
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-26
  • 2022-11-04
  • 1970-01-01
  • 2021-03-09
  • 2021-05-16
  • 1970-01-01
  • 2019-04-30
相关资源
最近更新 更多