2016-08-04 14 views
0

Ich verwende *ngIf für ein ElementAngular2 ngIf dynamische Änderung

<div *ngFor="let el of elemenets> 
    <div *ngIf="el.offsetTop < scrollTop"> 
     .... 
    </div> 
</div> 

offsetTop die offsetTop des div *ngIf Zustand darstellen ist verpflichtet.

Was ich in der Komponente tun ist, ich die pageYOffset halten in der Variablen z

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

Es funktioniert, wenn Website geladen wird, aber wenn ich nach oben oder unten und Änderungswert von scrollTop Variable bleibt es gleich.

Wenn ich es richtig verstanden habe, ändert *ngIf Änderungen, wenn ScrollTop Variable ändert, sollte es erneut Bedingung bewerten, aber es ist nicht in meinem Fall.

Gibt es eine Lösung für mein Problem oder muss ich einen anderen Ansatz finden? Dank

Antwort

3

Sie verwenden können:

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

oder

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

Vielleicht schrieb ich die falsch Frage. Der Wert von window.pageYOffset wird in der Variablen gespeichert und ändert den Wert, wenn ich nach unten/oben blättern möchte, aber ngIf bewertet die Bedingung nur, wenn die Seite geladen ist. Die Bedingung wird nicht erneut ausgewertet, wenn sich der Wert der scrollTop - Variable ändert, wenn er –

+0

hat. Haben Sie einen meiner Vorschläge ausprobiert? Selbst wenn der Event-Handler aufgerufen wird, hilft dies nicht viel, wenn "this" nicht auf Ihre Komponente zeigt. –

+0

yep, das hat funktioniert! Danke, aber warum hat der zweite oder mein Ansatz nicht so funktioniert, wie es sollte? –

Verwandte Themen