取消订阅Angular中的可观察对象

时间:2018-07-04 10:20:43

标签: angular typescript asp.net-web-api rxjs observable

当我按下按钮时,会从服务器上获取特定车辆的信息。这是通过订阅可观察项来完成的。当我再次按下同一按钮时,我想取消订阅我正在查看的当前“ 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'   “可观察”。

我在这里做什么错了?

1 个答案:

答案 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
       });
     });
}