从后端获取一些数据后的Angular EventEmitter

时间:2017-08-19 04:35:47

标签: angular asynchronous eventemitter

我有下一个代码:

streets: Street[] = [];
@Output() sendStreets =  new EventEmitter<Street[]>();

triggerLoading(trig: string){
    switch(trig) {
      case 'street': {
        this.loadStreets(this.district);

        //sending data
        this.sendStreets.emit(this.streets);

        this.street = this.building = this.apartment = undefined;
        this.buildings = this.apartments = this.subscribers = [];
        break;
      }
}

所以问题是来自街道后端数组的this.loadStreets(this.district);方法请求以及当我发送数据this.sendStreets.emit(this.streets);时,我在第一个请求中进入父组件空数组,然后在第二个请求中一个我得到的数据,我应该在第一个请求等。 所以,例如我应该获取:

  

1请求:“[Str1,St2,St2]”,2请求:[“Str10,Str20,Str30”],   3请求:[Str20,Str30,Str40]等。

但我明白了:`

  

1request:“[]”,2请求:“[Str1,St2,St2]”,3request:[“Str10,   Str20,Str30“等等。

`

我怎样才能异步发出它,我的意思是在loadStreet完成执行后我会发出数据?

UPD: 我如何收到数据:

<hs-filter> (sendStreets)= "getStreets($event)" </hs-filter >

getStreets(streets: Street[]){
    console.log(streets);
    this.streets = streets;
    this.buildings = this.apartments = [];

    this.streets.forEach(street => {
      this.addresses.push(
        new AddressItem(street.id, 'street', street.title));
    });
  }

2 个答案:

答案 0 :(得分:1)

class EventEmitter扩展Subject {   构造函数(isAsync:boolean = false) - 所以对于你的情况: @Output()sendStreets = new EventEmitter(true);

答案 1 :(得分:0)

我已经解决了这个问题,但我不喜欢我的解决方案。 如果有人有另一个,请回答

我刚将sendStreets移动到loadStreets中。所以我得到下一个代码:

private loadStreets(district: District){
    this.addressService.getStreets(district)
      .subscribe(streets => {
        this.streets = streets;
        this.sendStreets.emit(streets);
      });
  }

这里的一切都很好,因为我从后端走到街道后发送街道。