【问题标题】:Share specific value from a Service with different component in Angular与 Angular 中的不同组件共享服务的特定价值
【发布时间】:2019-11-27 06:28:01
【问题描述】:

我是 Angular 的新手,遇到了问题。我正在尝试在组件之间传递一些数据。我已经尝试了在互联网上找到的不同解决方案,但我没有得到正确的解决方案。

我通过一个组件中的 api 服务获取具有两个值(标题和 id)的数据(这工作正常)。在点击标题时,我想被重定向到另一个组件并接收点击标题的 id 以便调用另一个 api 端点。如何调用特定值 id 并将其带入其他组件?

这是我的第一个服务(工作):

export class HeadlinesService {
   apiUrl = '...'

   httpOptions = {
      headers: new HttpHeaders({ 'Content-Type': 'application/json' })
   };

   constructor(private _http: HttpClient) { }

   getHeadlines(): Observable<Headline[]> {     
     return this._http.get<Headline[]>(this.apiUrl); 
   }

}

我的头条课:

export class Headline {
   heading: string;
   id: string;
   source: string;
}

我在这里调用服务以显示标题(工作)

export class NewArticleComponent implements OnInit {

    headlines$: Headline[];

    constructor(private headlineService: HeadlinesService, private deleteService: DeleteService, private router: Router) { }

    ngOnInit() {
       return this.headlineService.getHeadlines()         
       .subscribe(headline => this.headlines$ = headline)
    }
}

我需要一个服务,它从上面的服务接收 id(但只有 id)并用它调用另一个 api 端点。

apiURL = '.../{id}'

从这里调用数据应该像上面的工作服务一样工作,所以我唯一的问题是将 id 从一个服务传递到另一个服务。

我希望有人可以帮助我:)

【问题讨论】:

  • 单击Headline 会将用户重定向到另一个部分(Angular 页面或状态),其中包含特定于单击的Headline 的资源,对吧?

标签: angular angular-services angular-httpclient


【解决方案1】:

您可以通过以下方式在导航中传递数据:

constructor(...
  router: Router,
  ...) {}

goToPage(headerId) {
  this.router.navigate(['/header'], { queryParams: { headerId } });
}

假设您正在以编程方式进行(从您的 component.ts 代码中)

在“接收”标头组件上

sub: Subscription;
headerId;

constructor(
  private route: ActivatedRoute,
  private router: Router) {}

  ngOnInit() {
    this.sub = this.route
      .queryParams
      .pipe(flatMap(params => {
        this.headerId = params['headerId'];
        return this.apiService.getById(this.headerId);
      })).subscribe(
        response => {
          //You should have your header response from API here
        }
      );
  }

【讨论】:

  • 成功了。谢谢 :)。现在我想用它从另一个 api 获取数据。我尝试使用与上面类似的 get 方法,但将 id 作为参数提供: this 在我的 component.ts 中:code return this.dataService.getData(this.headerID) .subscribe(data => this.data $ = data) 这在我的服务中:codegetData(headerID): Observable { return this._http.get(${this.apiUrl}/${headerID}); } 但它不会工作。你知道如何正确解决吗?
  • 检查我为您的要求所做的更新。引入 flatMap 运算符是因为嵌套订阅是一种反模式。 syntaxsuccess.com/viewarticle/fixing-rxjs-anti-patterns
猜你喜欢
  • 1970-01-01
  • 2019-05-03
  • 1970-01-01
  • 2017-10-16
  • 2017-01-04
  • 2017-04-15
  • 1970-01-01
相关资源
最近更新 更多