提问者:小点点

在Angular Service的OnDestroy钩子中取消订阅HTTP客户端调用


是否有办法取消订阅角度服务的超文本传输协议调用。

附言:我知道rxjs“采取”运算符或从组件本身取消订阅服务。

    import { HttpClient } from "@angular/common/http";
import { Injectable, OnDestroy } from "@angular/core";

@Injectable()
export class SampleService implements OnDestroy {
  constructor(private httpClient: HttpClient) {}

  getSampleData() {
    return this.httpClient.get("https://jsonplaceholder.typicode.com/todos/1");
  }
  ngOnDestroy(): void {
    // automatically unsubscribe to service.
  }
}

共1个答案

匿名用户

服务没有UI驱动的生命周期,因此无论您如何实现onDestroy,除非您自己手动调用它,否则它永远不会被调用。

这就是为什么我们有工具,阅读API,例如:

  • 异步管道示例:
<div> {{ yourObservable$ | async | json }} </div>
@Component({...})
export class Component implements OnInit {
   yourObservable$: Observable<any>
   constructor(public yourService: TheService) {
       this.yourObservable$ = this.yourService.getSampleData()
   }
}

异步管道会注意到生命周期的变化,并在组件被删除时自动订阅和取消订阅

  • 订阅(您可以通过调用. add添加其他sybscription),并在组件的onDestroy调用订阅.取消订阅()

订阅.取消订阅是异步管道的构建基础,您也可以自己使用它