这不一定是真的
ngOnDestroy
在从observable获取最新值之前调用。
这取决于执行操作所需的逻辑或时间。就你而言,
logout
恩戈德斯特罗
例如,考虑下面的代码
stackblitz
. 如果你看到
测试服务.ts
文件中,我创建了两个函数,如下所示:
...
nextValueDelayed(value: boolean) {
setTimeout(() => {
this._test.next(value);
});
}
nextValue(value: boolean) {
this._test.next(value);
}
...
现在,从
应用组件.ts
,我的电话如下:
...
reverse() {
this.visible = !this.visible;
this._testService.nextValue(this.visible);
}
reverseDelayed() {
this.visible = !this.visible;
this._testService.nextValueDelayed(this.visible);
}
...
这两个函数都是从按钮和
visible
负责制造和破坏
HelloComponent
.
应用程序组件.html
<hello name="{{ name }}" *ngIf="visible"></hello>
<button (click)="reverse()">Reverse</button>
<button (click)="reverseDelayed()">Reverse Delayed</button>
现在,
订阅和安慰价值,取消订阅,如下所示:
...
ngOnInit(){
this.sub = this._testService.test$.subscribe(value=>{
console.log(value);
})
}
ngOnDestroy(){
this.sub.unsubscribe();
}
...
现在,试着点击
Reverse
和
Reverse Delayed
按钮,当你点击
,它将打印所有值。但是,当你点击
,组件将在获取最新值之前被销毁,因为我们使用了
setTimeout
增加一些延迟。