私のオブジェクトが空であるかどうかをチェックしたいのですが、要素をレンダリングしないでください、これは私のコードです:
<div class="comeBack_up" *ngIf="previous_info != {}">
<a
[routerLink]="['Inside_group_page',{'name':previous_info.path | dotTodash }]"
>
{{previous_info.title}}
</a>
</div>
しかし、私のコードは間違っています、これを行う最善の方法は何ですか?
これはあなたが望むことをするはずです:
<div class="comeBack_up" *ngIf="(previous_info | json) != ({} | json)">
以下
<div class="comeBack_up" *ngIf="(previous_info | json) != '{}'">
各{}
は新しいインスタンスを作成し、異なるオブジェクトインスタンスの====
比較は常にfalse
になります。文字列に変換されるとき===
はtrue
になります
次のようなものを使用することもできます。
<div class="comeBack_up" *ngIf="isEmptyObject(previous_info)" >
コンポーネントにisEmptyObject
メソッドが定義されている場合:
isEmptyObject(obj) {
return (obj && (Object.keys(obj).length === 0));
}
上記の答えは大丈夫です。しかし、私はビューで次を使用する本当に素晴らしいオプションを見つけました:
{{previous_info?.title}}
おそらく重複した質問 Angular2-{{object.field}}が存在するかどうかを確認しないとエラーになります
これは私のために働いた:
length
プロパティを確認し、?
を使用してundefined
エラーを回避します。
あなたの例は次のようになります:
<div class="comeBack_up" *ngIf="previous_info?.length">
UPDATE
Lengthプロパティは配列にのみ存在します。質問はオブジェクトに関するものなので、Object.getOwnPropertyNames(obj)
を使用してオブジェクトからプロパティの配列を取得します。例は次のようになります。
<div class="comeBack_up" *ngIf="previous_info && Object.getOwnPropertyNames(previous_info).length > 0">
previous_info &&
は、オブジェクトが存在するかどうかを確認するために追加されます。それがtrue
と評価されると、次のステートメントは、オブジェクトに少なくともon proportyがあるかどうかをチェックします。プロパティに値があるかどうかはチェックしません。
上記の回答から、以下はうまくいかなかったか、あまり好ましくありませんでした。
(previous_info | json) != '{}'
は{}
空の場合にのみ機能し、null
またはundefined
の場合には機能しませんObject
はテンプレートでアクセスできないため、Object.getOwnPropertyNames(previous_info).length
も機能しませんでした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および未定義から保護するための流andで便利な方法です。
少し長い方法(興味がある場合):
TypeScriptコードでこれを行います。
this.objectLength = Object.keys(this.previous_info).length != 0;
そしてテンプレートで:
ngIf="objectLength != 0"
読みやすくするために作成されたライブラリ ngx-if-empty-or-has-items は、オブジェクト、セット、マップ、または配列が空でないかどうかをチェックします。たぶんそれは誰かを助けるでしょう。 ngIfと同じ機能を備えています(then、else、および 'as'構文がサポートされています)。
arrayOrObjWithData = ['1'] || {id: 1}
<h1 *ngxIfNotEmpty="arrayOrObjWithData">
You will see it
</h1>
or
// store the result of async pipe in variable
<h1 *ngxIfNotEmpty="arrayOrObjWithData$ | async as obj">
{{obj.id}}
</h1>
or
noData = [] || {}
<h1 *ngxIfHasItems="noData">
You will NOT see it
</h1>