我有下一个代码:
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));
});
}
答案 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);
});
}
这里的一切都很好,因为我从后端走到街道后发送街道。