如何从方法返回的对象访问属性

时间:2017-10-29 19:39:57

标签: angular typescript

我无法设置值" contact.company_name"来自方法getClient。

  getContacts() {
    this.contactService.getContacts().subscribe(
      data => {
        for (let contact of data) {
          contact.company_name = this.getClient(contact);
          console.log(contact);
        }
        this.contacts = data
      },
      error => console.log(error),
      () => this.isLoading = false
    );
  }

响应是this.getClient(contact)http-request是:

{_id: "59f43f1a3a2fc421c00ad8b1", name: "company2", street: "street 2", zipcode: "45678",…}

我如何联系.company_name就像company.name? contact.company中的id与company._id中的id相同。 http请求和响应是正确的。

例如,联系人是:

{
anrede : "sir"
company : "59f43f1a3a2fc421c00ad8b1"
nachname :"surname1"
titel : "dr."
vorname : "name1"
__v : 0
_id : "59f43f363a2fc421c00ad8b2"   
}

1 个答案:

答案 0 :(得分:0)

如果您知道该公司将永远存在,只需将contact.company_name = this.getClient(contact).name; 添加到该行的末尾:

const company = this.getClient(contact);

if (company) {
    contact.company_name = company.name;
}

如果它可能不存在,您需要先检查:

getClient

修改

现在我看到你的forkJoin方法是如何工作的,你说它的响应是JS对象,但是它没有返回任何内容而是订阅了一个observable。

以下是使用getContacts() { return this.contactService.getContacts() .flatMap(data => { if (data.length > 0) { return Observable.forkJoin( data.map(contact => { return this.contactService.getClient(contact) .map(company => { contact.company_name = company.name; console.log(contact); return contact; }); })); } return Observable.of([]); }); } 解决此问题的方法(您可能需要导入该运算符才能使用它):

mouseDragged

有关如何组合可观察对象的更多示例,请参阅以下文章:

http://blog.danieleghidoli.it/2016/10/22/http-rxjs-observables-angular/