如何在 Angular 7 的激活链接中获取 url 参数并从服务类调用 rest api

Posted

技术标签:

【中文标题】如何在 Angular 7 的激活链接中获取 url 参数并从服务类调用 rest api【英文标题】:How to get url parameter in activated link in angular 7 and call rest api from service class 【发布时间】:2020-04-16 10:23:44 【问题描述】:

我想使用 Get 参数使用 id 字段获取数据。 Follwing 是我的 html url 代码,它重定向到特定页面但不调用服务来获取 rest api

  <a [routerLink]="['/usedCars/detail', lists.id]" class="btn btn-danger">Read more...</a>

下面是我的 service.ts 函数,我已经实现了 import HttpClient, HttpErrorResponse from '@angular/common/http';

getcarDetail(id:string)
    return this.http.get<Autocardetail>(this.ServerUrl + 'autocardetail/'+id).pipe(
      catchError(this.handleError)
    );
  

下面是我在 ngOninit 函数上调用服务的 component.ts 文件。

import  Component, OnInit  from '@angular/core';

import  Router, ActivatedRoute, ParamMap from '@angular/router';
import  Autocardetail  from '../autocardetail';
import  AutopostService  from '../autopost.service';

import  Observable  from 'rxjs';
import  switchMap  from 'rxjs/operators';

@Component(
  selector: 'app-autopostdetail',
  templateUrl: './autopostdetail.component.html',
  styleUrls: ['./autopostdetail.component.css']
)
export class AutopostdetailComponent implements OnInit 
  detail$: Observable<Autocardetail>;
  constructor(
        private route: ActivatedRoute,
        private router: Router,
        private autopostService: AutopostService
      ) 

  ngOnInit() 
    this.detail$ = this.route.paramMap.pipe(
      switchMap((params: ParamMap) => 
        return this.autopostService.getcarDetail(params.get('id'))
    )
    );
  

下面是我的类文件

export class Autocardetail 
  id: string;
  car_name: string;
  car_model: string;
  car_built: string;
  car_manufac_year: string;

下面是一个邮递员示例,响应的样子,


    "car_id": "0",
    "car_name": "Nissan",
    "car_model": "Sunny",
    "car_built": "Nissan inc",
    "car_manufac_year": "2019",
    "usedcarimages": [
        "0_Nissan-1.jpg",
        "0_Nissan-2.jpg"
    ]

我使用这个网站作为参考https://www.truecodex.com/course/angular-project-training/service-and-http-client-for-blog-detail-recent-blog-and-categories-angular

【问题讨论】:

你遇到了什么错误? 不,我没有收到任何错误,但它也没有从服务类调用 api 请求 在下面查看我的解决方案。 【参考方案1】:

我认为您的代码中唯一的潜在问题是swtichMap() 的使用。

目前-

switchMap((params: ParamMap) =>
  this.autopostService.getcarDetail(params.get('id'))
)

代码指令this.autopostService.getcarDetail(params.get('id'))应该和swtichMap()在同一行如果你使用箭头函数或显式return语句需要提到如果你打破了界限。

正确方法-

switchMap((params: ParamMap) => 
  return this.autopostService.getcarDetail(params.get('id'))
)

switchMap((params: ParamMap) => this.autopostService.getcarDetail(params.get('id')))

【讨论】:

@nilay 您需要在this.autopostService.... 之前指定return。正确检查这两种方式。 是添加了返回但仍然没有调用服务方法。 @nilay 你能用你在编辑器中更改的代码更新你上面的问题吗? @nilay 你能在这里做一个stackBlitz吗stackblitz.com

以上是关于如何在 Angular 7 的激活链接中获取 url 参数并从服务类调用 rest api的主要内容,如果未能解决你的问题,请参考以下文章

在 Angular.js 中有条件地显示链接

如何在Angular 7中单击按钮时获取下拉列表的选定选项[重复]

Angular 7/8 - 如何在应用程序组件中获取 url 参数

如何使用 AngularFirebase 和 Angular 7 从用户集合中获取用户数据

出于测试目的,如何在 angular2 中模拟已激活的父路由?

Angular 7:如何获取当前页面的完整 URL