ボタンを同じ幅にしようとしていますが、実際にボタン2の幅にアクセスする前にすべてのレンダリングと処理を完了するのを実際に待っている問題があります。角度2でアクセスする前に要素が正しい幅になるのを正しく待つ方法はありますか?
「働く」という意味のDoCheck
を試してみましたが、これは正しい幅の値を受け取ることを意味しますが、2度目の実行にすぎません。何らかの理由で二回NgDoCheck
実行されるため
、できるだけ早く私はbutton.style.width = widest + 'px';
ステートメントを追加すると、ボタンはすべて115px
の幅を取得しますので、二度目ngDoCheck
実行すると、それは再びすべてのボタンの上に行くが、今回ますすべてのボタンは115px
に設定されているため、は最初にngDoCheck
の値を設定したので、159px
の正しい値になることはありません。
この問題について正しい方法はありますか? DoCheck
を使用すると、2回実行されるため間違っているように見えます。入力値を確認していないのは、DoCheck
のユースケースです。
export class ButtonGroupComponent implements DoCheck {
constructor(private _elementRef: ElementRef) {}
ngDoCheck() {
if (this.equalWidth) {
let buttons = this._elementRef.nativeElement.getElementsByTagName('button');
let widest = 0;
for (var button of buttons) {
if (button.getBoundingClientRect().width > widest) {
widest = button.getBoundingClientRect().width;
}
}
for (var button of buttons) {
button.style.width = widest + 'px';
}
}
}
}
私はplunkerコードがうまくいくと思います。私のためにちょっとデバッグとテストの問題になるでしょう。 – micronyks
@micronyks私は実際に、AfterViewInitを使って問題を解決したことを初めて知りました。 – Chrillewoodz
すごくおいしい。 – micronyks