使用 ActivatedRoute 与 AcitivatedRouteSnapshot 访问路线参数

发布日期:2026-07-09 23:57:03   来源 : 杭州电子商务研究院    浏览量 :1
杭州电子商务研究院 发布日期:2026-07-09 23:57:03  
1

介绍

我们经常需要获取路由参数,以便根据该参数使组件动态化。在本指南中,我们将学习如何从 URL 中提取数据或参数,包括几种不同的方法。

我们将介绍

  1. 需要从 URL 获取参数
  2. 如何在路由路径中创建动态参数
  3. 如何从 URL 中提取参数
  4. 如何使用ActivatedRoute提取参数
  5. 如何使用ActivatedRouteSnapshot提取参数

需要从 URL 获取参数

如果您已经在 app-routing.module.ts 中定义了路线路径,那么为什么还需要动态路径?

假设您有一个网格格式的学生列表,如下图所示。

如您所见,网格模板上有学生的姓名、标准和部门,如果您需要查看学生的更多数据,可以单击“阅读更多”

用户点击“阅读更多”后,您将显示一个包含数据库中数据的查看或编辑页面。在构建页面时,您不知道学生 ID,因此无法访问 API (应用程序接口)并将其余学生数据提供给查看或编辑页面。

你需要将学生 ID 存储在某个地方。但是存储在哪里呢?

你可能认为你可以使用 observable 来实现这一点。确实可以。但它有一些限制。例如,刷新页面后你的数据将会丢失。

因此最好在路由参数中发送学生 ID,并在ngOnInit()方法中获取该参数,这是 Angular 中的生命周期钩子之一。

现在清楚了为什么以及在何处在路由路径中使用动态参数。那么让我们继续看看如何在路由路径中创建动态参数,以及在组件中提取该参数的不同选项是什么。

在路由路径中创建动态参数

为了提取参数,需要在路由路径中制作动态参数,这样才能通过参数名提取参数的值。

不明白?别担心!我会通过一个例子来解释。

首先,我们将创建一个组件。

      ng g c First --skipTests=true
    

现在我们需要配置 app-routing.module.ts。我们创建一个具有动态参数的路由路径,该参数将显示在 HTML 中。

应用程序.路由.模块.ts

      import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { FirstComponent } from './first/first.component';

const routes: Routes = [
  {
    path: 'first/:parameter',
    component: FirstComponent,
  
  },
  {
    path: "",
    redirectTo: '/first/1',
    pathMatch: 'full'
  }
];

@NgModule({
  imports: [RouterModule.forRoot(routes)],
  exports: [RouterModule]
})
export class AppRoutingModule { }
    

现在我们的 app-routing.module.ts 已经准备好配置,是时候提取动态参数的值并将其显示在 HTML 页面上了。

我们将通过两种方式提取动态参数:使用ActivatedRouteActivatedRouteSnapshot

从 URL 中提取参数

现在我们将在配置了路由/first/:parameter 的FirstComponent中提取参数

首先,我们需要为ActivatedRouteActivatedRouteSnapshot创建ActivatedRoute实例。我们将在FirstComponent的构造函数中创建一个实例

为了查看ActivatedRouteActivatedRouteSnapshot之间的区别,我们将创建另一个Router实例来更改路由运行时。

使用 ActivatedRoute 提取参数

为了提取参数,我们需要订阅ActivatedRouteparams变量。以下代码片段显示了此订阅。

**first.component.ts**

      import { Component, OnInit } from '@angular/core';
import { Router, ActivatedRoute, ActivatedRouteSnapshot } from '@angular/router';

@Component({
  selector: 'app-first',
  templateURL: './first.component.html',
  styleURLs: ['./first.component.scss']
})
export class FirstComponent implements OnInit {

  public parameterValue: string;

  constructor(
    private _router: Router,
    private _activatedRoute: ActivatedRoute
  ) { }

  ngOnInit() {
    this._activatedRoute.params.subscribe(parameter => {
      this.parameterValue = parameter.parameter
      this._router.navigate(['first/4'])
      this.parameterValue = parameter.parameter
    })

  }
}
    

上面的代码片段显示我们已经创建了RouterActivatedRouter的实例,正如我们所讨论的。在ngOnInit()生命周期钩子中,我们必须订阅ActivatedRouteparams变量。

获取参数值后,我们动态地改变路由或导航的值,并将参数值存储parameterValue变量中。它将显示在FirstComponent的HTML中

**first.component.html**

      <h1>{{parameterValue}}</h1>
    

现在是时候运行代码并在浏览器中查看输出了。

如你所见,我们得到了在运行时更改的参数的新值。我们的参数值已从1更改为4。这意味着它从起始值更改为新值。

现在让我们使用ActivatedRouteSnapshot提取值

使用 ActivatedRouteSnapshot 提取参数

**first.component.ts**

      import { Component, OnInit } from '@angular/core';
import { Router, ActivatedRoute, ActivatedRouteSnapshot } from '@angular/router';

@Component({
  selector: 'app-first',
  templateURL: './first.component.html',
  styleURLs: ['./first.component.scss']
})
export class FirstComponent implements OnInit {

  public parameterValue: string;

  constructor(
    private _router: Router,
    private _activatedRoute: ActivatedRoute
  ) { }

  ngOnInit() {

    this.parameterValue = this._activatedRoute.snapshot.params.parameter
    this._router.navigate(['first/4'])
    this.parameterValue = this._activatedRoute.snapshot.params.parameter

  }
}
    

在上面的代码片段中,ActivatedRoute快照变量是ActivateRouteSnapshot的实例

我们做的事情和在ActivatedRoute中做的一样。我们获取路由的动态参数的值,将其值存储在名为paramterValue的变量中,并将其显示在 HTML 中。

现在是时候使用此配置运行应用程序并查看输出了。

如您所见,我们在parameterValue变量中获得了相同的值,但是我们的路线已从first / 1更改first / 4

我们没有得到改变的参数的值。这就是ActivatedRouteActivatedRouteSnapshot之间的区别。在ActivatedRouteSnapshot中,我们的组件和路由中的值不同步。

结论

感谢您阅读本指南。希望您喜欢它。现在您已经清楚了解了在何处使用ActivatedRouteActivatedRouteSnapshot。如果您有兴趣了解有关它们的更多信息,可以访问此处

以上内容来自杭州电子商务研究院推送
关注
关于我们
热门推荐
合作伙伴
免责声明:本站部分资讯来源于网络,如有侵权请及时联系客服,我们将尽快处理
Copyright © 2025-2027 ToB产业网址导航 公安备案 浙公网安备33010602013138号 浙ICP备16025413号-9
支持 反馈 关注 数据