首页 > 解决方案 > 如何在 Angular 中清空组件属性,同时保留其类型定义?

问题描述

假设一个组件具有以下属性:

private foo$: Observable<Array<SomeType>>;
private bar: SomeOtherType;

后来他们得到了价值......

this.foo$ = someSubject.pipe(switchMap(...whatever...
this.bar = new SomeOtherType(...whatever...

在某些时候,无论出于何种原因,我都想清空这两个属性,清空是指删除它们的值,因此将它们设置回它们获得值之前的状态。

制作它们undefined不是一种选择。如果我这样做,他们会丢失他们的“类型信息”。我希望 TypeScript 和 Angular 知道它们仍在处理 Observable 和 SomeOtherType 的对象。

我有什么选择?

标签: angulartypescriptvariablestypesundefined

解决方案


为了“将变量设置回它们获得值之前的状态”,请将它们设置为undefined

this.foo$ = undefined;
this.bar = undefined;

在您进行测试的 stackblitzheroes$中,Observable与async管道一起使用:

<li *ngFor="let hero of heroes$ | async" >

如果heroes$设置为undefined,则列表将从视图中消失,并且 Observable 停止工作。当组件被销毁时,async管道会自动取消订阅;当 Observable 变量变为undefined.

除了 Observable 与async管道一起使用的情况外,将变量设置为undefined不会阻止 Observable 工作,如此 stackblitz所示。


推荐阅读