私の学歴は次のとおりです:
リーリーおよび次のコンポーネント
リーリーパラメータから取得したデータを表示するための次のロジックがあります:
リーリーカスタム イベントを使用して更新を処理します
リーリー
データを操作するための次の HTML があります:
リーリーただし、フィールド [value]="loadedEducation.school" (updatedValue)="loadedEducation.school = $event"
の更新されたデータは子コンポーネントにバインドされないため、更新後はデータベースからデータを取得していない場合は、前に表示されます。
どのような可能性を実装できるでしょうか?
ngOnChanges を実装しようとしましたが、成功しませんでした。
loadedEducations リストは、リスト内の項目のプロパティを変更しても変更されません。リストを更新してみるか (
を使用してください。this.loadedEducations = returnsEducations
)、プロジェクトで状態管理問題の根本原因は、
この問題を解決するにはいくつかの方法がありますが、それぞれに長所と短所があります。@Input()
がオブジェクトと配列の内部の変更を検出できないことです。これらは両方とも 参照型 であるためです。education
プロパティはオブジェクトであるため、プロパティを直接変更する親コンポーネントでの変更 (例:education.school = 'newValue'
) は、子コンポーネントのプロパティをトリガーしません# Any ##@Input() 教育への変更必要なプロパティのみをプリミティブとして渡します
parent.component.ts
リーリー
parent.component.html
リーリー
child.component.ts
リーリー ######アドバンテージ:######
シンプルで直感的に使用でき、「通常通り」動作します 変更を子コンポーネントに送信するための追加のボイラープレートは必要ありません
@Input の数が増えると、扱いにくくなります
親コンポーネントと子コンポーネント間のセマンティックな結合が失われ、実際には共有インターフェイス (つまり、Education- インターフェイス) によってバインドされます。
プロパティが参照型でもある場合、適切に拡張できません。この場合、これらのプロパティも解凍してプリミティブとして渡す必要があります
変更時に親内のオブジェクトを再構築する-
-
リーリー
ディープクローンparent.component.ts
parent.component.html
リーリー
child.component.ts リーリー ######アドバンテージ:######
Education
インターフェイスの使用を維持して、親コンポーネントと子コンポーネント間のセマンティック結合を維持します不変オブジェクトの使用を奨励する
サブコンポーネントへの変更を受け取るために、追加のボイラープレートは必要ありません。これはオブジェクトの一般的な推奨事項です
parent.component.ts リーリー
parent.component.html-
リーリー
リーリー
child.component.ts
child.component.html
リーリー ######アドバンテージ:######
また、educationSubject
をサービスに配置し、それを必要とするコンポーネントに同じサービスを挿入するなど、多くのコンポーネントを使用するように簡単に拡張できます。不変オブジェクトの使用を推奨します
追加の定型文は必要ありませんサブコンポーネントへの変更を受信します
欠点:
関数を作成します。
リアクティブ コードを使用する場合の一般的な制限 (ストリーム経由でのみ変更する、サブスクリプション解除を回避する必要がある (