2016-08-04 114 views
0

我使用*ngIf一個元素Angular2 ngIf動態變化

​​

的offsetTop表示在div *ngIf條件綁定到的的offsetTop。

我在組件做的是我把pageYOffset可變e.g

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

當網站被載入它的工作原理,但是當我向上或向下滾動和scrollTop變量的變化值也保持不變。

如果我理解正確,*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的值存儲在變量中,並且當我向下/向上滾動時它會更改值,但ng僅在加載頁面時評估條件。當scrollTop變量的值發生變化時它不會重新評估條件 –

+0

您是否嘗試過我的任何建議?即使調用事件處理程序,如果「this」不指向您的組件,這也無濟於事。 –

+0

是的,那工作!謝謝,但爲什麼第二種方法或我的方法不能像它應該那樣工作? –