親からデータを受け取り、div にテキストを表示する子コンポーネントがあります。親undefined
がデータとして送信することは可能です。そうするとき、divはその高さを0に移行することになっています。これは、cssトランジションを介して行います。テキストの長さがわからないので、div の高さを に移行することになっていますauto
。これを行っているコード サンプルを見つけて、コンポーネントに適合するように変換しました。
export class LanguageDetail implements OnChange, OnInit {
@Input() language: Language
@ViewChild("detailPanel") detailPanel: ElementRef;
private shownLanguage: Language;
ngOnInit() {
this.shownLanguage = new Language();
}
ngOnChange() {
if (this.detailPanel) {
var detailPanel: JQuery = $(this.detailPanel.nativeElement);
if (this.language) {
...
// calculate the end height and apply a transition with fixed values to this.shownLanguage
this.shownLanguage = this.language;
oldHeight = detailPanel.height();
detailPanel.height("auto");
newHeight = detailPanel.height();
detailPanel.height(oldHeight);
...
} else {
...
// do a transition to 0 for this.shownLanguage
...
}
}
}
}
ここでの問題は、ngOnChange が呼び出されると、プロパティ言語が実際に変更されましたが、ビューはバインドされており、ngOnChange 関数内で割り当てられたthis.shownLanguage
ときに実際には更新されません。それ自体this.language
へのバインディングについても同様です。this.language
OnChange イベントが発生するのが早すぎます。div にテキストがないため、正しい高さを取得できないため、計算が正しく実行されません。ビューが変更されたときにトリガーされるイベントは実際にありますか、それともビューを強制的に再描画して正しい高さの div を実際に取得できるようにする方法はありますか?