重度のコンポーネント ページ (30 以上のコンポーネントをロード) にコンポーネントを最初にロードしたときにのみ発生するように見える奇妙なケースに遭遇しています。
@Component{
selector: <parent-component>
template: `<child-component [myObject]=myObject>
}
export class ParentComponent {
private myObject:DTOValue;
constructor(service:MyService){
service.getDTOValue().subscribe((dtoValue:DTOValue) => {
this.myObject = dtoValue;
});
}
}
@Component{
selector: <child-component>
template: `<div></div>
}
export class ChildComponent {
@Input set myObject(value:DTOValue) => {//do something};
constructor(){
}
}
このコードでは、親は入力として子への値を取得します。この値は後で要求から取得されるため、子が最初に初期化されるとき、入力は未定義になる可能性があります。値がリクエストから返されて variablemyObject
に設定されると、子コンポーネントがトリガーされた入力イベントを受け取ることが期待されます。ただし、タイミングの関係で、特に多くのファイルが読み込まれているページを最初に読み込むときは、常にそうであるとは限りません。
子コンポーネントが入力を受信しない場合、ページの他の場所をクリックすると、変更検出がトリガーされ、入力値が取得されるようになります。
私が考えることができる2つの可能な解決策は、いくつかの大きなコード変更を必要とするので、それらを実装する前に今すぐ選択することを確認したい.
入力をサブジェクトに変更して、正しいイベントが確実にトリガーされるように入力値をプッシュします (これはやり過ぎのようです)。
動的ローダーを使用して、リクエストが正しい値で返されたときにコンポーネントをロードします(これもやり過ぎのようです)。
更新: plnker の追加: http://plnkr.co/edit/1bUelmPFjwPDjUBDC4vb、ここで、タイトルにデータ バインディングが適用されないように見えることがわかります。
任意の提案をいただければ幸いです。
ありがとう!