2016-08-04 11 views
0

私は*ngIf条件がにバインドされているdiv要素のoffsetTopを表すoffsetTop要素Angular2 ngIfダイナミックな変化

​​

ため*ngIfを使用しています。私はコンポーネントに何

は、私はサイトがロードされるとき、それは動作しますが、私はスクロールアップまたはダウンしてscrollTop変数の変動値とき、それは同じまま例えば変数

class Test implements onInit{ 
    scrollTop:number = 0; 
    ngOnInit{ 
    window.addEventListener('scroll',function(){ 
     this.scrollTop = window.pageYOffset; 
     console.log(this.scrollTop) 
    },true) 
    } 
} 

でpageYOffsetを維持しています。

*ngIf時計が変わるので、scrollTop変数が変更されたときに再び条件を評価する必要がありますが、私の場合はそうではありません。

私の問題を解決する方法はありますか、それとも別のアプローチが必要ですか? おかげであなたが使用することができます

答えて

3

@HostListener('window:scroll) 
scrollHandler(event) { 
    this.scrollTop = window.pageYOffset; 
    console.log(this.scrollTop) 
} 

または

class Test implements onInit{ 
    scrollTop:number = 0; 
    ngOnInit{ 
    window.addEventListener('scroll',() => { // <== changed to arrow function to keep `.this` 
     this.scrollTop = window.pageYOffset; 
     console.log(this.scrollTop) 
    },true) 
    } 
} 
+0

は、たぶん私は間違って質問を書きました。 window.pageYOffsetの値は変数の中に格納され、下にスクロールすると値が変わりますが、ngIfはページがロードされたときだけ条件を評価します。 scrollTop変数の値が変更されたときに条件を再評価しない –

+0

私の提案を試しましたか?イベントハンドラが呼び出された場合でも、 'this'がコンポーネントを指していない場合、これはあまり役に立ちません。 –

+0

うん、それは働いた!ありがとう、なぜ2番目の、または私のアプローチがうまくいかなかったのですか? –

関連する問題