2016-08-28 9 views
7

Stworzyłem aplikację NativeScript z kątem 2, mam tablicę obiektów, które oczekuję w interfejsie aplikacji. zachowanie polega na tym, że jeśli wepchnę obiekt do tablicy bezpośrednio wewnątrz ngOnInit(), to działa, ale jeśli utworzę obietnicę w ngOnInit(), to nie działa. Oto kod:Angular 2 nie odświeżaj widoku po tablicy push w obietnicy ngOnInit

export class DashboardComponent { 
    stories: Story[] = []; 

    pushArray() { 
     let story:Story = new Story(1,1,"ASD", "pushed"); 
     this.stories.push(story); 
    } 

    ngOnInit() { 
     this.pushArray(); //this is shown 

     var promise = new Promise((resolve)=>{ 
      resolve(42); 
      console.log("promise hit"); 
     }); 

     promise.then(x=> { 
      this.pushArray(); //this is NOT shown 
     }); 
    } 
} 

względna html jest:

<Label *ngFor="let story of stories" [text]='story.message'></Label> 

podczas uruchamiania aplikacji widzę tylko jeden impuls, ale nie stworzyłem przycisk, który wyzwoli się „console.log (JSON. stringify (this.stories)); " i w tym momencie, kiedy pukam przycisk, ui wydaje się wykrywać zmienioną tablicę, a drugi pchnięty obiekt pojawia się.

Edycja:

utworzonego prostszy przykład w tym nici: Angular 2: when i change a variable in a promise.than in ngOnInit the view doesn't refresh

+0

Jeśli ponownie załadujesz stronę, pojawią się zmiany? –

Odpowiedz

12

Wykrywanie zmiany na podstawie odniesienia i popychanie elementu do tablicy nie spowoduje to. Spróbuj zaktualizować odniesienie w ten sposób:

this.stories.push(story); 
this.stories = this.stories.slice(); 
+0

Dzięki robotom \ –

+0

@nickspoon, co wycina exatcly – tero17

+0

@Zammel Tworzy kopię części tablicy, ale używane w ten sposób bez żadnych argumentów tworzy płytką kopię całej tablicy: https: //developer.mozilla .org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice – nickspoon

Powiązane problemy