我正在学习 NgRx,我需要替换这个模板代码:
<ion-button *ngIf="myVar.length > 0" ... >
对于从状态观察器获取值的代码:
myVar$: Observable<string> = this.store.select(mySelector);
所以我用谷歌搜索了一下,发现了很多这样的例子:
<ion-button *ngIf="(myVar$ | async)?.length > 0" ... >
但是后来我得到了这个编译错误:
[ng] Error: src/app/myModule/myPage.page.html:25:26 - error TS2532: Object is possibly 'undefined'.
互联网上有很多这样的例子。为什么我的不起作用?这是某种应该现代化的“旧形式的编码”吗?现在正确的做法是什么?
抛出此错误是因为您尝试访问可能未定义的对象的 length 属性。
您可以使用 Angular 安全导航运算符(?):
<ion-button *ngIf="(myVar$ | async)?.length > 0" ... >
此语法是正确的,但是,TypeScript 严格的 null 检查仍可能会引发错误,因为它不能保证长度始终存在。
要解决 TypeScript 错误,您可以在 length 之后添加非空断言 (!):
<ion-button *ngIf="(myVar$ | async)?.length! > 0" ... >