我正在使用Angular 4,Openlayers和Firebase构建实时地图作为我的后端数据库。
我还使用AngularFire2
与firebase
通信我的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