要素のoffsetLeftを取得しようとしていますが、setTimeoutを使用しない限り不正な値が返されます。 ngAfterContentInitためドキュメントに記載されているように角2のディレクティブのライフサイクルフック(ngAfterContentInit)が機能しない
ngAfterContentInit() {
console.log(this.el.nativeElement.offsetLeft);
}
ドキュメントの状態この「ディレクティブの内容が完全に初期化された後に呼び出されるライフサイクルフックを。」:私はこれを持っているディレクティブで基本的に
。しかし、40pxを返す代わりに、それは8pxを返します(それがどこにあるかは分かりません)。
なぜ機能しないのですか?ディレクティブのルート要素がディレクティブの一部とみなされておらず、その子のみが存在するからですか?
それがないが、それはハック見えるんが、それはまた、非常にハック – yodalr
@yodalrに見える - それは実際にではありません。 :)これはちょうど角度の働きです。ここでの主なポイントは、あなたが**後でコンテンツを見ることができる**ということです。これは一般に、あなたが行うことを確認する最も簡単な方法です。しかし、親コンポーネントがレンダリングされてから長時間のHTTPリクエスト、つまり長い時間が経過してコンテンツがレンダリングされる場合、適切な時点を選択する唯一の信頼できる方法は、コンテンツ内のコンポーネントと明示的に通信し、準備ができていることを意味します。 –