1
私は、親コンポーネントからデータを受け取り、divにテキストを表示する子コンポーネントを持っています。親はundefined
をデータとして送ることができます。それが実行されると、divはその高さを0に遷移させるはずです。これはCSSの遷移を介して行います。テキストの長さがわからないので、divの高さはauto
に変わったはずです。私はこのようなコードサンプルを見つけました。私は自分のコンポーネントに適合するように変換しました。 ngOnChangeが呼び出されたときに Angular2ビューの更新ライフサイクルフックはありますか?
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
...
}
}
}
}
今の問題は、プロパティの言語が実際に変更されたされ、ビューはしかし
this.shownLanguage
にバインドされ、
this.language
がngOnChange関数内でそれに割り当てられている場合、実際に更新されません。
this.language
へのバインディングにも同じことが起こります。 OnChangeイベントが早すぎます。 divにテキストが入力されていないため、正確な高さが表示されず、計算が正しく行われません。ビューが変更されたときにトリガされるイベントが実際に存在するのですか、ビューを再描画して実際にdivを正しい高さにすることができますか?
私はAfterViewCheckedを試しましたが、値が変わったときに何度も呼び出されます。実際にAfterViewCheckedを実装しているLanguageDetailコンポーネントの部分的なビューだけでなく、すべてのコンポーネントが呼び出されるように見えます。 –
面白いですが、今は動作し、AfterViewCheckedは2回だけ呼び出されます。まあ、ありがとう。 –
ngAfterViewCheckedは毎秒100回のように呼び出されます – Mick