オブジェクトにフィールドが存在するかどうかの確認について質問があります。
ユーザーが持っているすべてのカテゴリを印刷したいので、次のようなことをしています:
<ul *ngIf="user.categories.length > 0" *ngFor="#category of user.categories">
<li>
{{category.name}}
</li>
</ul>
理由?すべてのデータは適切に印刷されますが、Webコンソールで次のようなエラーが表示されます。
Cannot read property 'name' of null
しかし、私が次のようなことをするとき:
<ul *ngIf="user.categories.length > 0" *ngFor="#category of user.categories">
<li *ngIf="category">
{{category.name}}
</li>
</ul>
その後、すべて大丈夫です。
私は何か間違ったことをしていますか、それとも毎回これを確認する必要がありますか?このような問題を抱えたことはありますか?
基本的な使用法
安全なナビゲーション演算子を使用する
{{category?.name}}
name
は、category
がnull
でない場合にのみ読み取られます。
array
これは.
(参照解除)演算子に対してのみ機能します。配列には次を使用できます
{{records && records[0]}}
参照: Angular 2-コンテキストERROR CONTEXTで未定義エラーのプロパティ '0'を読み取れません:[オブジェクトオブジェクト]
非同期パイプ
async
パイプでは、次のように使用できます
{{(chapters | async)?.length
ngModel
現在、ngModel
で分割する必要があります
[ngModel]="details?.firstname" (ngModelChange)="details.firstname = $event"
*ngIf
別の方法は、ビューの一部を常に*ngIf="data"
でラップして、data
が参照可能エラーを防ぐ前にレンダリングされるのを防ぐことです。