2016-04-18 8 views
0

ich einige html haben, die wie folgt aussieht:Looping nicht, wenn im Intervall

  <li *ngFor="#item of items; #i=index" > 
      <h2>{{ item }}</h2> 
      </li> 

Ich möchte dann die Liste jede Sekunde bevölkern, so habe ich so etwas wie dieses:

let t=setInterval(() =>{ 
       this.items = ["a1", "a2", "a3", "a4", "a5", "a6", "a7", "a8", "a9"]; 
      },1000); 

I Wissen Sie, wenn Sie das betrachten, sieht es so aus, als ob Sie ein Intervall laufen, der Wert ist derselbe. Ich habe eine andere Logik in meinem Code, die if und else-Anweisungen hat, die das Intervall unterbrechen, aber ich bekomme überhaupt keine Elemente angezeigt, und das ist meine Sorge. Ich erwarte, dass sich die 9 Elemente in einer Liste auf meiner HTML-Seite befinden, aber keine von ihnen wird angezeigt. Wenn ich das Intervall entferne, werden die Elemente angezeigt. Also, wenn es innerhalb des Intervalls ist, wird es nicht angezeigt. Wie kann ich es so machen, dass es funktioniert? Ich bin mir des Problems nicht sicher.

+0

'() => {this.items = [" a1 "," a2 "," a3 "," a4 "," a5 "," a6 "," a7 "," a8 "," a9 "] ; } 'sieht wie eine Funktion aus, im ursprünglichen JavaScript benötigt setInterval den Funktionsnamen anstelle der Funktion selbst als ersten Parameter. 'setInterval (function(), 1000)' wird nur einmal ausgeführt. 'setInterval (function, 1000)' ist der richtige Weg. – Desmond

+0

Stellen Sie sicher, dass 'setInterval' und dessen Callback tatsächlich ausgeführt werden. – kemsky

+0

Ich habe versucht, stattdessen die Funktion zu erstellen, die Logik dort hineinzusetzen und den Funktionsnamen stattdessen in das Intervall zu setzen, aber es funktioniert immer noch nicht. Wenn ich console.log ('loop running') in die Funktion lege, wird es alle 1 Sekunde gedruckt, damit es aufgerufen wird. – user2924127

Antwort

2

Eine "Angular 2-Wege" Tut dies zu nähern wäre AsyncPipe mit einer beobachtbaren in Verbindung zu verwenden, und der Observable.timer Betreiber:

@Component({ 
    selector: 'foo', 
    pipes: [AsyncPipe], //import this from angular2/common 
    template: ` 
    <ul> 
     <li *ngFor="#item of (items | async); #i=index" > 
     <h2>{{ item }}</h2> 
     </li> 
    </ul> 
    ` 
}) 
class YourComponent { 
    items: Observable<string[]>; 

    constructor(){ 
     this.items = Observable.timer(0, 1000) //emit after 0 ms, then every 1000ms 
           .map(()=>{ 
            //insert real business logic 
            return ["a1", "a2", "a3", "a4", "a5", "a6", "a7", "a8", "a9"] 
           }) 
    } 

} 
+0

Es scheint nicht zu laufen. Ich habe versucht, auch eine console.log Anweisung direkt vor der Rückkehr einzufügen, um zu sehen, ob es feuert, aber nichts wird gedruckt. – user2924127

+0

Was ist in der Konsole? – drewmoore

+0

nichts ist gedruckt und keine Fehler. – user2924127

Verwandte Themen