不调用ngOnDestroy(ngFor和Async管道)

时间:2017-08-03 21:55:21

标签: angular firebase angularfire2

我正在使用Angular 4,Openlayers和Firebase构建实时地图作为我的后端数据库。

我还使用AngularFire2firebase通信我的Angular应用。

为了在地图中显示要素,我将ol.Feature Class包裹在一个组件中,以便我可以利用角度特征。

<app-vector-layer-feature
    *ngFor = "let feature of (observableFeatureList | sliceObservableList:0:MAX_FEATURES) | async"
    [id] = feature.messageId
    [layer] = "firebaseLayer"
    [coordinate]= feature.coordinate
    [properties] = feature
>
</app-vector-layer-feature>

我在使用此代码时面临的问题是:

  • observableListFeature返回的数组长度大于1时,一切都按预期工作。

  • observableListFeature返回的数组的长度等于1时,我尝试使用firebase删除该项:不会为该组件调用ngOnDestroy {{1} })

app-vector-layer-feature的恢复代码:

observableFeatureList

管道仅用于对结果数组进行拼接,以便仅显示地图中要素的数字(用户输入):

ngOnInit(){
  ...
  this.observableFeatureList = this.getFeatureListObservable();
  ...
}

getFeatureListObservable(){
  // this.db is of type AngularFireDatabase
  return this.db.list('messages')
  .map( (userList)=> {
    console.log(userList, 'UserList'); // Logs: [] UserList
                                       // But the element stills on map
                                       // because ngOnDestroy not firing
  }) //sort data by date

}

此外,这里是@Pipe({name: 'sliceObservableList'}) export class SliceObservableListPipe implements PipeTransform { transform(value: Observable<Array<any>>, start: number = 0, end : number): Observable<Array<any>> { console.log(start, end, 'startend') return value .map( (list)=> { return list.slice(start, end); } ) } }

的实现
app-vector-layer-feature

0 个答案:

没有答案