在有角度的应用程序中,我们ngOnDestroy()
为组件/指令提供了生命周期挂钩,并使用该挂钩取消订阅可观察对象。
我想清除/破坏在@injectable()
服务中创建的可观察性。我看到一些帖子说ngOnDestroy()
可以在服务中使用。
但是,这是一种好的做法,并且是唯一的方法吗?何时调用它?有人请澄清。
提供程序中提供了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
是一个属于Foo
component 的实例,因此在销毁它时可以将Foo
其销毁。
对于属于根注射器的提供程序,这将在应用程序销毁时发生,这有助于避免使用多个引导程序(即在测试中)导致内存泄漏。
当父注入者的提供者在子组件中被订阅时,它不会在销毁组件时被销毁,这是组件取消订阅组件的责任ngOnDestroy
(如另一个答案所解释)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句