angular - 如何在 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 的对象。
我有什么选择?
解决方案
为了“将变量设置回它们获得值之前的状态”,请将它们设置为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所示。
推荐阅读
- java - 目标窗口已因未知错误关闭:未找到 Web 视图
- ruby-on-rails - SyntaxError:net-sftp.rb:48:语法错误,意外的 tCONSTANT 将 Ruby 中的“文件传输完成”从 Filezilla 客户端放到本地主机
- html - Sloping/inclined header
- docker - 使用 docker 容器后未清除磁盘空间的问题
- javascript - 动态数据加载在 java 脚本中不起作用
- javascript - 删除目录内容 Web dev
- botframework - 如何在 BotFramework SDK3 C# 中切换对话框
- apache-camel - 从 varchar 的 mac IN 列表中选择 mac 列
- javascript - jsp 上的会话变量值不会每秒更新一次 ajax 调用。仅在页面刷新后才反映
- odoo - 如何在 Odoo 8 中清除期刊的未结未结余额?