angular - RxJs - 取消点击上的所有子事件(导航到另一个选项卡)
问题描述
我从数据库中获取所有设计(比如说 100 个)并循环它们。
我正在使用子调用加载每个设计图像
<div *ngFor="let design of designs">
<div (click)="showDesignDetails(design.designId)">
<app-thumbnail [designId]="design.designId"></app-thumbnail>
</div>
</div>
在子组件中,我的代码如下所示。
ngOnInit() {
this.designService.getDesignById(this.designId).subscribe(
design => {
this.designLoaded = true;
},
error => (this.errorMessage = error)
);
}
显然,每个设计图像(100 个调用)都需要时间。同时,如果我想导航,我想取消所有这些电话。
我怎样才能做到这一点?
解决方案
这是清理热可观察对象的好模式。
private destroy$ = new Subject();
ngOnInit() {
this.designService.getDesignById(this.designId)
.pipe(takeUntil(this.destroy$))
.subscribe(
design => {
this.designLoaded = true;
},
error => (this.errorMessage = error)
);
}
ngOnDestroy() {
this.destroy$.next();
this.destroy$.complete();
}
编辑问题:
ngOnDestroy
导航离开页面时调用该方法。它是Angular 的组件生命周期钩子之一,就像ngOnInit
您正在钩子一样。
您的组件现在需要实现以下(至少):
implements OnInit, OnDestroy
推荐阅读
- php - 用数组列表修剪字符串
- lua - LUA 更改注释样式
- java - 如何在 Java 中读取包含任何 ASCII 字符的字符串?
- c# - 在 MacOS 中生成 .Net Core Soap Webservices 代理
- c++ - 向日期运算符添加天数+
- javascript - JavaScript 如何遍历 HTMLcollection 中的每个当前和未来元素?
- c++ - 在 C++ 中调用超级构造函数之前做一些事情
- java - 如何在 Java 中编写自定义原子方法?
- r - `devtools::check()` 删除日志文件
- ios - 我得到:使用未解析的标识符“randomBallNumber1”;你是说'randomBallNumber'吗?