Angular 4+ ngOnDestroy()在使用中-销毁可观察到的

mperle:

在有角度的应用程序中,我们ngOnDestroy()为组件/指令提供了生命周期挂钩,并使用该挂钩取消订阅可观察对象。

我想清除/破坏在@injectable()服务中创建的可观察性我看到一些帖子说ngOnDestroy()可以在服务中使用。

但是,这是一种好的做法,并且是唯一的方法吗?何时调用它?有人请澄清。

可能是Flask:

提供程序中提供了OnDestroy生命周期挂钩。根据文档:

销毁指令,管道或服务时调用的生命周期挂钩。

这是一个例子

@Injectable()
class Service implements OnDestroy {
  ngOnDestroy() {
    console.log('Service destroy')
  }
}

@Component({
  selector: 'foo',
  template: `foo`,
  providers: [Service]
})
export class Foo implements OnDestroy {
  constructor(service: Service) {}

  ngOnDestroy() {
    console.log('foo destroy')
  }
}

@Component({
  selector: 'my-app',
  template: `<foo *ngIf="isFoo"></foo>`,
})
export class App {
  isFoo = true;

  constructor() {
    setTimeout(() => {
        this.isFoo = false;
    }, 1000)
  }
}

请注意,在上面的代码中Service是一个属于Foocomponent 的实例,因此在销毁它时可以将Foo其销毁。

对于属于根注射器的提供程序,这将在应用程序销毁时发生,这有助于避免使用多个引导程序(即在测试中)导致内存泄漏。

当父注入者的提供者在子组件中被订阅时,它不会在销毁组件时被销毁,这是组件取消订阅组件的责任ngOnDestroy(如另一个答案所解释)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

angular4:使用valueChanges的自定义“等于”验证可观察到

返回可观察到的内部可观察到的可激活Angular 4防护

Angular 4-可观察到的捕获错误

订阅Angular 8中可观察到组件的问题

在Angular中使用if条件等待可观察到的响应

使用takeUntil进行可观察的Angular销毁:ngOnDestroy中缺少.next()时会发生什么

使用RxJS过滤单个值并返回可观察到的值,并通过Angular模板中的async使用可观察到的值

带有http可观察到的Angular 4验证程序

Angular4可观察到的ServiceStack Server事件订阅

Angular 8:从可观察到的RxJS中过滤结果(来自Angular.io教程)

如何使用router.navigate处理4xx错误,可观察到。角度2

每次在Angular 2中满足条件时,rxJS即可观察到重复调用

等待可观察到的RxJS时在Angular中显示加载指示器

Angular 中的地址搜索栏,可观察到带有推荐的 url

Angular 2无法在可观察到的回调中访问它

如何在angular2中手动引发可观察到的错误?

如何取消订阅或处理Angular2或RxJS中可观察到的间隔?

Angular 2,可观察到的共享服务中的并发性

Angular2-在routerOnDeactivate()中可观察到的停止/取消/清除

如何在Angular Jasmine Spec中测试主题和可观察到的返回值?

在Angular2中可观察到的组件属性变化

可观察到的服务在组件NgOnInIt中不起作用-Angular2

等待可观察到的for循环完成,然后继续在Angular 5中循环

使用rxjs Angular Firestore从id合并可观察到的

Angular HTTP可观察到的元组

在Angular组件和非Angular组件之间进行通信:从可观察到的回调中返回数据

Firebase中可观察到的后端?

在角度服务中可观察到

在Typescript中可观察到词典