angular - Angular 11 - 不推荐使用订阅:使用观察者而不是完整的回调
问题描述
我有一个Angular
应用程序,其中开始出现错误subscribe
,它们已被弃用。
这是我的订阅:
this.route.params.subscribe(params => {
this.clienteId = +params['clienteId'];
this.isNew = !this.clienteId;
if (!this.isNew) {
this.clienteService.get(this.clienteId).subscribe(c => {
this.cliente = c;
this.formNuevo.patchValue(this.cliente);
});
}
});
这是client-service.ts
(get
):
public get(idClient: number): Observable<Client> {
return this.http.get<Client>(`${PREFIX}/${idClient}`);
}
这是新订阅的错误:
-> 'clienteId'
:object access via string literals is disallowed (no-string-literal)tslint(1)
-> subscribe
:subscribe is deprecated: Use an observer instead of a complete callback (deprecation)tslint(1)
如何解决问题并将更改应用到此订阅?
解决方案
使用高阶映射运算符,例如
switchMap
从一个可观察对象映射到另一个对象。尽量避免嵌套订阅。“错误”主要是由于尝试发送一个或其他回调以进行订阅,同时指定其他回调
null
。例如。使用next
andcomplete
withnull
forerror
。它可以通过发送显式指定回调的观察者对象来解决。
尝试以下
import { iif, NEVER } from 'rxjs';
import { switchMap } from 'rxjs/operators';
this.route.params.pipe(
switchMap(params => {
this.clienteId = +params['clienteId'];
this.isNew = !this.clienteId;
return iif( // <-- `iif` for conditional mapping
() => !this.isNew,
this.clienteService.get(this.clienteId),
NEVER // <-- don't emit if condition fails
);
})
).subscribe({
next: c => {
this.cliente = c;
this.formNuevo.patchValue(this.cliente);
},
error: error => {
// handle error
},
complete: () => {
console.log('Request complete');
}
});
推荐阅读
- android - 如何在 Flutter 中访问 DocumentReference 数组?
- reactjs - 在 JSON 数据中的可选字段的情况下找不到 AG-GRID 字段
- python - 登录 admin 后 Django 开发服务器停止
- css - Css负z-index在另一个元素内不起作用
- c# - 如何使用自己的模型映射 REST 实体
- ruby-on-rails - 模型中未定义的模块方法
- azure - 如何找到azure静态网站的DNS A记录?
- algorithm - 游戏拼图,两个玩家玩替换硬币价值的游戏
- mysql - MySQL - 小int的where条件
- applescript - 一键转发标记的消息。苹果脚本