2017-09-22 6 views
0

私はちょうどAngular2で始まり、公式ドキュメントを読んでいます。しかし、バインディングがいつどのように起こるかについて具体的な詳細は見つかっておらず、期待通りに動作しないようです。Angular2:プロパティバインドはいつ行われますか?

私は5秒後に変更するには、子コンポーネントによって表示されるテキストは、しかし、そうでない期待するシンプルな子コンポーネント

@Component({ 
    selector: 'dummy', 
    template: ` 
    <div>{{data}}</div> 
    ` 
}) 
export class Dummy { 
    @Input() data; 

} 

とルートコンポーネント

@Component({ 
    selector: 'main', 
    template: ` 
    <h1>hello</h1> 
    <dummy [data]="data"></dummy> 
    ` 
}) 
export class MainComponent { 
    data: string = "initial text"; 

    ngOnInit() { 
     setTimeout(this.initData, 5000); 
    } 

    initData() { 
     this.data = "new text"; 
    } 
} 

を持っています。私は間違って何をしていますか?ドキュメントでは、どのような条件でバウンド値が初期化され、更新されるのかについて説明していますか?

+1

https://blog.thoughtram.io/angular/2016/02/22/angular-2-([変更の検出]についての記事をチェックchange-detection-described.html)を参照してください。あなたの例では、変更を確認するために角度を求める必要があります。これを行うには、** ChangeDetectorRef **を呼び出し、** markForChanges()**メソッドを呼び出します。詳細は記事を読んでください。 – BuDen

+0

@BuDen:ありがとうございます!公式文書のどこに変更の検出が記載されているか知っていますか? –

+1

[ChangeDetectorRef](https://angular.io/api/core/ChangeDetectorRef)のドキュメントをチェックすることができますが、いくつかの例があります。 – BuDen

答えて

2

あなたはthisの文脈を失っています。 setTimeoutコールバックが実行された時点で、thisはコンポーネントを指していません。 javascript this problemについて少し調べたいかもしれません。

試してみてください。

setTimeout(()=>{ 
     this.data = "new text"; 
},5000); 
+2

@blue_note、この回答は正しいです。plunkr example i created、https://plnkr.co/edit/AoTI8qMxtJs4FUXTBKgW?p=preview – 12seconds

0

あなたはのOnInitインターフェイスをインポートして、あなたのコンポーネントがそれを実装するために忘れてしまいました。

import { Component, OnInit } from '@angular/core';

そして

export class MainComponent implements OnInit { ... }

+0

を参照してください。ただし、これは問題ではありません。型チェックのためだけに使用したインタフェースで、関数 'ngOnInit'は無関係に呼び出されます –

関連する問題