2017-01-17 4 views
0

を変更するCSSクラスを追加取得する方法を、私は更新CSSクラスoffsetWidthとoffsetHeight値が後に彼らに

.slider-horizontal { 
 
    width: 210px; 
 
    height: 20px; 
 
}

 
    import {Component, OnInit, Input, ViewChild, ElementRef, Renderer} from '@angular/core'; 
    export class SliderComponent implements OnInit { 
     @ViewChild('picker') picker: ElementRef; 

     constructor(private renderer: Renderer, private el: ElementRef) { 

     } 

     ngAfterViewInit() { 
     this.renderer.setElementClass(this.picker.nativeElement, 'slider-horizontal', true); 

     console.log(this.picker.nativeElement.offsetWidth);//old value 
     console.log(this.picker.nativeElement.offsetHeight);//old value 
     } 
    } 

どのようにしている新しい値を得るのですかコンポーネントを持っていますcssを適用した後に変更しましたか?

+1

あなたの問題を示すプランナーを提供してください。 – micronyks

答えて

0

私はあなたがそれをここに見つけることができる作業例でplnkrを作った:plnkr、しかし結果は予想通りであるように見える:

679 
0 

210 
20 

だから私のplunkで、それが働いているように見える...

変更の検出があなたのケースで実行されていないことは確かですが、手動で呼び出すようにしてください。価値観に今、あなたを

ngAfterViewInit() { 
    this.renderer.setElementClass(this.picker.nativeElement, 'slider-horizontal', true); 

    this.changeDetectorRef.detectChanges(); 

    console.log(this.picker.nativeElement.offsetWidth);//old value 
    console.log(this.picker.nativeElement.offsetHeight);//old value 
} 

だからあなたのコンストラクタはこの

constructor(private renderer: Renderer, 
      private el: ElementRef, 
      private changeDetectorRef: ChangeDetectorRef) { 

} 

ようになり、あなたのコンストラクタ

private changeDetectorRef: ChangeDetectorRef 

にこれを追加し、このような変化検出を呼び出しますコンソールでうまくいくはずです。

+0

ここでは、 'detectChanges'がここで再定義されていると思います。 @loi maiが本当の例を提供してくれれば素晴らしいだろうか? – yurzui

+0

@yurzuiこれまでに問題があったことを覚えていて、手動で変更検出を呼び出すと(RCがビルドされている)、実際にはコード例が役に立ちそうだ –

+0

ありがとう、plnkr。それはまさに私のコードがどのように見えるかです。しかし、私は角度cliを使用します。ときどき正しく動作しますが、時には正しく動作しません。また、その幅は、デバッグするときにWebブラウザのウィンドウ幅に動的に追従します。つまり、デバッグ中にブラウザウィンドウのサイズを変更しました。 'this.changeDetectorRef.detectChanges();'を追加しますが、違いはありません。 –

関連する問題