当我按下按钮时,会从服务器上获取特定车辆的信息。这是通过订阅可观察项来完成的。当我再次按下同一按钮时,我想取消订阅我正在查看的当前“ vehicleDetail”(以避免内存泄漏),因为我正在检查另一辆车的新数据。
我正在使用VehicleDetail类,具有以下属性:
$("#myFilter").data("uiAutocomplete").selectedItem.value
这是我的.service.ts中的代码:
export class VehicleDetail {
id: number;
name: string;
alarm: Alarms[] | null;
signalinfo: SignalInfo[];
position: Position | null;
}
和我的.component.ts中:
getVehicleDetail(id: number): Observable<VehicleDetail> {
const url = `${this.vehiclesUrl}/${id}/${'detail'}`;
return this.http.get<VehicleDetail>(url).pipe(
tap(_ => this.log(`fetched vehicle detail id=${id}`)),
catchError(this.handleError<VehicleDetail>(`getVehicledetail id=${id}`))
);
}
我得到的错误是来自takeUntil,它说:
错误TS2339:类型上不存在属性'takeUntil' “可观察”。
我在这里做什么错了?
答案 0 :(得分:1)
在其中不创建套接字的http请求不需要取消对可观察对象的订阅,该请求最终确定为完成状态。为什么不直接使用您以参数形式收到的ID从updateInfo直接调用服务?
updateInfo(vehicleId: number): void {
this.vehicleService.getVehicleDetail(vehicleId)
.subscribe((data) => {
this.vehicleDetail = data;
if (this.vehicleDetail.position) {
this.setMap();
return;
}
this.map.flyTo(new Leaflet.LatLng(50.7089, 10.9746), 4, {
animate: true,
duration: 4
});
});
}