javascript - *ngIf を使って Angular 2 のテンプレートで空のオブジェクトを確認する方法
オブジェクトが空かどうかを確認したいので、要素をレンダリングしないでください。そして、これが私のコードです:
<div class="comeBack_up" *ngIf="previous_info != {}">
<a [routerLink]="['Inside_group_page',{'name':previous_info.path | dotTodash }]">
{{ previous_info.title }}
</a>
</div>
でも私のコードは間違っています、これを行う最良の方法は何ですか?
回答 #1
これであなたが望むことができるはずです:
<div class="comeBack_up" *ngIf="(previous_info | json) != ({} | json)">
または短い
<div class="comeBack_up" *ngIf="(previous_info | json) != '{}'">
各{}は新しいインスタンスを作成し、異なるオブジェクトインスタンスの====比較は常にfalseになります。文字列に変換されると、===はtrueになります。
Plunkerの例
回答 #2
上記の回答から、次のものはうまくいかなかったか、あまり好ましくありませんでした:
(previous_info | json) != '{}'は{}が空の場合にのみ機能し、nullやundefinedの場合には機能しません- `
Object.getOwnPropertyNames(previous_info).length` も機能しませんでした。テンプレート内では `Object` にアクセスできないためです - 専用の変数
this.objectLength=Object.keys(this.previous_info).length !=0;を作りたくありません。 専用の関数を作りたくありません
isEmptyObject(obj) { return (obj && (Object.keys(obj).length === 0)); }
解決策:keyvalue パイプと ?.(セーフナビゲーション演算子)を使います。そして、それは簡単なようです。
previous_info=null または previous_info=undefined または previous_info={} の時にうまく動作し、偽値として扱います。
<div *ngIf="(previous_info | keyvalue)?.length">
keyvalue - オブジェクトまたはマップをキーと値のペアの配列に変換します。
?. - Angularのセーフナビゲーション演算子(?.)は、nullやundefinedを防ぐための流暢で便利な方法です
デモ: Angular 9でのデモですが、以前のバージョンでも動作します
回答 #3
そのようなものも使うことができます:
<div class="comeBack_up" *ngIf="isEmptyObject(previous_info)" >
コンポーネントで定義されたisEmptyObjectメソッドを使って:
isEmptyObject(obj) {
return (obj && (Object.keys(obj).length === 0));
}
回答 #4
上の答えは問題ありません。しかし、ビューで次を使用するための本当に良い方法を見つけました:
{{previous_info?.title}}
おそらく重複した質問 Angular2 - {{object.field}} が存在するかどうかを確認しないとエラーになる
