16

angular 2でNativeScriptアプリを作成しました。アプリケーションのフロントエンドに表示されると予想されるオブジェクトの配列があります。動作は、オブジェクトを ngOnInit() 内の配列に直接プッシュすると機能しますが、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
         });
     }
 }

相対htmlは次のとおりです。

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

アプリの起動時にプッシュが 1 回しか表示されませんが、「console.log(JSON.stringify(this.stories));」をトリガーするボタンを作成しました。その瞬間、ボタンをタップすると、UI が変更された配列を検出したようで、他のプッシュされたオブジェクトが表示されます。

編集:

このスレッドでより単純な例を作成しました: Angular 2: when i change a variable in a promise.than in ngOnInit the view doesn't refresh

4

3 に答える 3

25

変更検出は参照に基づいており、要素を配列にプッシュしてもトリガーされません。次のように参照を更新してみてください。

this.stories.push(story);
this.stories = this.stories.slice();
于 2016-08-29T08:30:27.123 に答える