首页 > 解决方案 > 订阅订阅以将数据从服务加载到组件中(Angular)

问题描述

我想将来自服务的两种方法的数据加载到组件中。此代码不起作用 - 我不知道公司名称,我了解:

private userData;
private companyName;

ngOnInit() {

    this.dataService.getUser(this.idUser).subscribe((user) => {
        this.userData = user[`data`][0];
    });

    this.dataService.getCompany(this.userData.id_company).subscribe((company) => {
        this.companyName = company[`data`][0].name;
    });

}

然后我在订阅中订阅:

private userData;
private companyName;

ngOnInit() {

    this.dataService.getUser(this.idUser).subscribe((user) => {

        this.userData = user[`data`][0];

        this.dataService.getCompany(this.userData.id_company).subscribe((company) => {
            this.companyName = company[`data`][0].name;
        });

    });

}

这是这样做的好习惯吗?有没有替代方法?

标签: angular

解决方案


您想使用switchMap运算符

    this.dataService.getUser(this.idUser).pipe(
       map(resp => resp.data[0]),
       switchMap(user => this.dataService.getCompany(user.id_company).pipe(
          map(resp => [user, resp.data[0]])
       ))
    ).subscribe(([user, company]) => {
       this.user = user;
       this.companyName = company.name;
    });

推荐阅读