2016-08-28 18 views
7

Açısal 2 ile bir NativeScript uygulaması oluşturdum, uygulamanın ön ucunda görmeyi beklediğim nesneler var. davranışı, bir nesneyi ngOnInit() içinde doğrudan diziye iter eğer çalışır, ancak ngOnInit() içinde bir söz oluşturursam, bu çalışmaz. Burada kodu:Açısal 2, diziyi ngOnInit vaadini gösterdikten sonra görüntüyü yenilemiyor

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 
     }); 
    } 
} 

göreceli html: i "console.log (JSON tetikleyen bir düğme oluşturduk

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

uygulama başladığında ben sadece bir baskı uygulanmasını

ama daha. stringify (this.stories));" ve o anda, düğmeye dokunduğumda, ui değiştirilen diziyi algılar ve diğer itilmiş nesne görünür.

DÜZENLEME:

Bu iplik daha basit bir örnek hazırlandı: Angular 2: when i change a variable in a promise.than in ngOnInit the view doesn't refresh

+0

Sayfayı yeniden yüklerseniz, değişiklikler mi görüntüleniyor? –

cevap

12

değişimi saptama referanslara dayanan ve bir dizi bir öğe iterek bunu tetiklemez. Şu şekilde başvuru yapmayı deneyin:

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

Çalıştığımıza teşekkürler \ –

+0

@nickspoon slice exatcly'yi ne yapar – tero17

+0

@Zammel Dizinin bir kısmının bir kopyasını oluşturur, ancak bunun gibi hiçbir argüman olmadan kullanılır, sadece tüm dizinin sığ bir kopyasını oluşturur: https: //developer.mozilla .org/en-US/docs/Web/JavaScript/Referans/Global_Objects/Array/dilim – nickspoon