[解決済み] angular keyvalue pipe sort properties / iterate in order (アンギュラーキーバリューパイプソートプロパティ / イテレートオーダー)
質問
Angularの キーバリュー パイプを使用して、次のようにオブジェクトのプロパティを反復処理します。
<div *ngFor="let item of object | keyvalue">
{{item.key}}:{{item.value}}
</div>
私は、プロパティが期待された順序で反復されないという問題を経験しました。そして、このコメントは、この問題を経験するのは私一人ではないことを示唆しています。
AngularでngForを使用してオブジェクトのプロパティをループする方法
誰かが、キーバリューパイプを使用するときに反復の順序を決定するものと、特定の反復順序を強制する方法をアドバイスしてください?私の理想的な反復の順序は、プロパティが追加された順序です。
ありがとうございます。
どのように解決するのですか?
Angularによると
ドキュメントによると
には
keyvalue
パイプでソートされます。
key
の順にソートします。この順序を変更するために comparer 関数を提供し、項目を
key
に、そして
value
に、あるいはオブジェクトのプロパティの入力順序に。
以下の比較器関数は様々な順序で項目を並べ替えます。
// Preserve original property order
originalOrder = (a: KeyValue<number,string>, b: KeyValue<number,string>): number => {
return 0;
}
// Order by ascending property value
valueAscOrder = (a: KeyValue<number,string>, b: KeyValue<number,string>): number => {
return a.value.localeCompare(b.value);
}
// Order by descending property key
keyDescOrder = (a: KeyValue<number,string>, b: KeyValue<number,string>): number => {
return a.key > b.key ? -1 : (b.key > a.key ? 1 : 0);
}
に適用すると
keyvalue
のパイプに適用されます。
<div *ngFor="let item of object | keyvalue: originalOrder">
{{item.key}} : {{item.value}}
</div>
<div *ngFor="let item of object | keyvalue: valueAscOrder">
{{item.key}} : {{item.value}}
</div>
<div *ngFor="let item of object | keyvalue: keyDescOrder">
{{item.key}} : {{item.value}}
</div>
参照 このスタックブリッツ をご覧ください。
定数を供給することや
null
を指定すると、オブジェクトのプロパティの入力順序が保持されます。
originalOrder
のようにオブジェクトのプロパティの入力順を保持しますが、例外が発生します (
このスタックブリッツ
):
<!-- The following syntaxes preserve the original property order -->
<div *ngFor="let item of object | keyvalue: 0">
<div *ngFor="let item of object | keyvalue: 374">
<div *ngFor="let item of object | keyvalue: null">
<!-- but they cause an exception (visible in the console) -->
ERROR TypeError: The comparison function must be either a function or undefined
さらに、テンプレート内でその構文を2回使っても、項目は全く表示されません。したがって、私はそれをお勧めしません。なお
undefined
を指定しても例外は発生しませんが、デフォルトの動作は変更されないことに注意してください。
key
値でソートされます。
関連
-
[解決済み] angular-cliのパラメータ --base-href と --deploy-url の違いは何ですか?
-
[解決済み] 継承と依存性注入
-
[解決済み] Angular2でNgForがPipeでデータを更新しない。
-
[解決済み] Angular / Angular Materialでmat-horizontal-stepperのステップをプログラムで移動させることは可能ですか?
-
[解決済み] AngularでFormArrayからすべての項目を削除する
-
[解決済み] RxJSのmap演算子でエラーを出す方法 (angular)
-
[解決済み] Reactive Forms - フィールドをタッチしたものとしてマークする
-
[解決済み] Angular2 DIRECTIVEは要素の既知のプロパティではないので、バインドできません。
-
[解決済み] Angular2ルートでAngularの方法でパラメータを取得するには?
-
[解決済み] の@ViewChildのreadパラメータは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] オブジェクトのキーと値に*ngForでアクセスする
-
[解決済み] Angular 2: 反応するフォームコントロールの反復処理
-
[解決済み] Angularでコンポーネントをリフレッシュする方法
-
[解決済み] Angularで、コントロールが作成された後、FormControlにバリデータを追加する方法は?
-
[解決済み] Angular / Angular Materialでmat-horizontal-stepperのステップをプログラムで移動させることは可能ですか?
-
[解決済み] RxJSのmap演算子でエラーを出す方法 (angular)
-
[解決済み] FormGroupから単一の値を取得する方法
-
[解決済み] Angular2ルートでAngularの方法でパラメータを取得するには?
-
[解決済み] ngFor を使用して、Typescript Enum を文字列の配列として反復処理するにはどうすればよいですか?
-
[解決済み] 64進数の文字列を角(2+)でエンコードおよびデコードする。