2016-08-28 3 views
7

角度2のNativeScriptアプリケーションを作成しました。アプリケーションのフロントエンドに表示されるオブジェクトの配列があります。振る舞いは、ngOnInit()の中で配列にオブジェクトを直接プッシュすると動作しますが、ngOnInit()でpromiseを作成しても動作しません。ここでのコードは次のとおりです。角2は、配列プッシュ後のビューをリフレッシュしません。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> 

アプリは、私が唯一のプッシュを参照して開始したとき、私は「はconsole.log(JSONをトリガーボタンを作成したよりも。 stringify(this.stories)); "その時点で、私がボタンをタップすると、UIは変更された配列を検出したように見え、もう一方のプッシュされたオブジェクトが表示されます。

EDIT:

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

+0

ページをリロードすると、変更が表示されますか? –

答えて

12

変化の検出は、リファレンスに基づいて、配列に要素をプッシュすることをトリガしないであろう。

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

ありがとうございます\ –

+0

@nickspoonスライスは何ですか? – tero17

+0

@Zammel配列の一部のコピーを作成しますが、このように引数なしで使用すると、配列全体の浅いコピーが作成されます:https://developer.mozilla .org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice – nickspoon

関連する問題