📜  route parammap subscribe angular 9 - Javascript (1)

📅  最后修改于: 2023-12-03 15:04:55.938000             🧑  作者: Mango

Angular 9中的路由参数订阅

在Angular应用程序中,路由参数是非常常见的。有时,我们需要动态地获取路由参数并根据这些参数执行一些操作。在Angular 9中,我们可以通过使用ParamMapsubscribe()方法来订阅路由参数。

获取路由参数

在获取路由参数之前,需要先定义路由。在app-routing.module.ts文件中,可以定义路由:

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

const routes: Routes = [
  { path: 'my-component/:id', component: MyComponent },
];

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

在这个例子中,我们定义了一个路由,my-component/:id,其中:id是一个参数。

MyComponent组件中,我们可以使用ActivatedRouteParamMap来获取路由参数。

import { Component, OnInit } from '@angular/core';
import { ActivatedRoute, ParamMap } from '@angular/router';
import { switchMap } from 'rxjs/operators';

@Component({
  selector: 'app-my-component',
  templateUrl: './my.component.html',
  styleUrls: ['./my.component.css']
})
export class MyComponent implements OnInit {

  constructor(
    private route: ActivatedRoute,
  ) { }

  ngOnInit(): void {
    this.route.paramMap.subscribe((params: ParamMap) => {
      const id = params.get('id');
      // Do something with the ID
    });
  }
}

在这个例子中,我们在ngOnInit方法中调用了route.paramMap.subscribe(),并传入一个回调函数。在回调函数中,我们获取了路由参数id的值,并执行了一些操作。

使用RxJS的switchMap操作符

有时候,我们需要获取路由参数的值,并使用这个值来发起HTTP请求。在Angular中,我们可以使用RxJS的switchMap操作符来实现这个目标。

import { Component, OnInit } from '@angular/core';
import { ActivatedRoute, ParamMap } from '@angular/router';
import { switchMap } from 'rxjs/operators';
import { MyService } from './my.service';
import { MyData } from './my-data';

@Component({
  selector: 'app-my-component',
  templateUrl: './my.component.html',
  styleUrls: ['./my.component.css']
})
export class MyComponent implements OnInit {

  data: MyData;

  constructor(
    private route: ActivatedRoute,
    private myService: MyService,
  ) { }

  ngOnInit(): void {
    this.route.paramMap.pipe(
      switchMap((params: ParamMap) => this.myService.getDataById(params.get('id')))
    ).subscribe((data: MyData) => {
      this.data = data;
    });
  }
}

在这个例子中,我们定义了一个MyService服务,其中有一个getDataById方法,用来根据ID获取数据。

MyComponent组件中,我们注入了这个服务,并使用switchMap操作符来将路由参数转换为数据。在回调函数中,我们将数据存储在组件的data属性中。

值得注意的是,在使用switchMap操作符时,需要在pipe()方法中使用。这是因为switchMap是一个高阶操作符,它可以将一个Observable转换为另一个Observable。使用pipe()方法可以方便地将多个操作符串联起来。

总结

路由参数是Angular中很常见的一个概念。通过使用ParamMapsubscribe()方法,我们可以订阅路由参数,并根据这些参数执行一些操作。在需要获取数据时,使用switchMap操作符可以方便地将路由参数转换为数据。