[解決済み] Angular 2: 配列の変更を検出するには?(@inputプロパティ)
2023-04-11 17:40:04
質問
ajaxリクエストを使用してオブジェクトの配列を取得する親コンポーネントがあります。
このコンポーネントには2つの子コンポーネントがあります。1 つはオブジェクトをツリー構造で表示し、もう 1 つはそのコンテンツを表形式でレンダリングします。親コンポーネントは、@input プロパティを通じて子コンポーネントに配列を渡し、子コンポーネントはコンテンツを適切に表示します。すべてが期待通りです。
問題は、オブジェクト内のフィールドを変更したときに発生します:子コンポーネントはそれらの変更について通知されません。手動で配列をその変数に再割り当てした場合のみ、変更がトリガーされます。
私はKnockout JSで作業するのに慣れており、observableArraysのような効果を得る必要があります。
DoCheckについて何か読んだことがありますが、それがどのように機能するのかよくわかりません。
どのように解決するのですか?
OnChanges
ライフサイクルフック
は、入力プロパティのインスタンスが変更されたときのみトリガーされます。
入力配列の中の要素が追加、移動、削除されたかどうかをチェックしたい場合は
IterableDiffers
の中に
DoCheck
ライフサイクルフック内で以下のように記述します。
constructor(private iterableDiffers: IterableDiffers) {
this.iterableDiffer = iterableDiffers.find([]).create(null);
}
ngDoCheck() {
let changes = this.iterableDiffer.diff(this.inputArray);
if (changes) {
console.log('Changes detected!');
}
}
配列内のオブジェクトの変更を検出する必要がある場合、すべての要素を繰り返し処理する必要があり、その際に KeyValueDiffers を各要素に対して適用する必要があります。(前のチェックと並行して行うことができます)。
詳しくはこちらの記事をご覧ください。 Angular2で配列内のオブジェクトの変更を検出する
関連
-
[解決済み] 要素外でのクリックを検出するにはどうすればよいですか?
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] JavaScript で配列に値が含まれているかどうかを確認するにはどうすればよいですか?
-
[解決済み] 配列に特定のインデックスで項目を挿入する方法 (JavaScript)
-
[解決済み] ngModel' は 'input' の既知のプロパティではないため、バインドできません。
-
[解決済み] Angularで@Input()の値が変更されたときに検出する方法は?
-
[解決済み】オブジェクトの配列を文字列のプロパティ値でソートする
-
[解決済み】配列に何かを追加する方法は?
-
[解決済み】 {this.props.children} に props を渡すには?}
-
[解決済み] HTML要素にスクロールバーがあるかどうかをチェックする
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Angular 2 下へスクロールする(チャット形式)
-
[解決済み] Angularで@Input()の値が変更されたときに検出する方法は?
-
[解決済み] 配列からオブジェクトを生成する
-
[解決済み] チェックボックスが選択されているかどうかを確認するjQuery
-
[解決済み] Chart.jsを使ってドーナツチャートの中にテキストを追加するには?
-
[解決済み] WebStormで未解決の変数が大量にある場合の警告に対処する方法は?
-
[解決済み] node.jsで文字列のsha1ハッシュを取得するにはどうすればよいですか?
-
[解決済み] jQueryで入力ファイルが空かどうかをチェックする方法
-
[解決済み] jQueryを使用して、すべてのクリックイベントハンドラを削除するにはどうすればよいですか?
-
[解決済み] HTML要素にスクロールバーがあるかどうかをチェックする