使用 Angular 指令,是否需要取消订阅服务?
With Angular Directives, do Service subscriptions need to be unsubscribed?
使用Angular 10,我有一个监听服务的指令。在这种情况下我需要取消订阅那个 Observable 吗?
例如:
@Directive({
selector: '[appShowFoo]'
})
export class ShowFooDirective {
@HostBinding('class.foo') foo: boolean;
constructor(private _fooService: FooService) {
this._fooService.foo$.subscribe(foo => this.foo = foo);
}
}
总是退订。活动订阅占用内存,如果不清理会导致内存泄漏,而不是您使用它们的地方。
像这样的事情会在可观察到的完成时清除订阅。
const sub = this.observable$.subscribe(
value =>{...},
error => {...},
/*onComplete*/
() => sub.unsubscribe()
);
对于一次性操作,您可以调用 toPromise()
并使用 then
或 await
。
使用Angular 10,我有一个监听服务的指令。在这种情况下我需要取消订阅那个 Observable 吗?
例如:
@Directive({
selector: '[appShowFoo]'
})
export class ShowFooDirective {
@HostBinding('class.foo') foo: boolean;
constructor(private _fooService: FooService) {
this._fooService.foo$.subscribe(foo => this.foo = foo);
}
}
总是退订。活动订阅占用内存,如果不清理会导致内存泄漏,而不是您使用它们的地方。
像这样的事情会在可观察到的完成时清除订阅。
const sub = this.observable$.subscribe(
value =>{...},
error => {...},
/*onComplete*/
() => sub.unsubscribe()
);
对于一次性操作,您可以调用 toPromise()
并使用 then
或 await
。