2017-03-27 4 views
1

子コンポーネントのメソッドを呼び出して、ビューの読み込み中に初期化するAngular2ビューがあります。子コンポーネントは、メソッド呼び出し中にアクセスしたい親のプロパティにバインドされています。ただし、何らかの理由で、コールが完了するまでは設定されません。 This plunkerはこの問題を示しています。ViewChildメソッド呼び出し中に角括弧のプロパティを使用できない

export class ParentComponent implements OnInit { 
    @ViewChild('child') 
    child: ChildComponent; 

    message: string; 

    ngOnInit() { 
    this.message = "Set by parent"; 
    this.child.onParentInvoke(); 
    } 
} 

export class ChildComponent implements OnInit { 

    @Input() 
    message: string; 
    callProperty: string; 

    onParentInvoke() { 
    //I want the message property to be populated here 
    this.callProperty = this.message; 
    } 

    ngOnInit() { 

    } 
} 

親テンプレート:

<div>This is parent</div> 
<div>Message: {{message}}</div> 
<child #child [message]="message"></child> 

子テンプレート:プロパティは、この段階で拘束されていない理由

<div>This is child</div> 
<div>Message during method call: {{callProperty}}</div> 
<div>Message: {{message}}</div> 

誰も私を伝えることができる、と私はあることそれを確実にするために行うことができますメソッド呼び出し中に値が設定されますか?

答えて

1

EDIT:ポール・テイラーコメント以下のソリューション:

export class ParentComponent implements OnInit { 
    @ViewChild('child') 
    child: ChildComponent; 

    message: string; 

    constructor(
     private ref: ChangeDetectorRef, 
) { } 

    ngOnInit() { 
    this.message = "Set by parent"; 
    this.ref.detectChanges(); 
    this.child.onParentInvoke(); 
    } 
} 
+0

おかげで、それはそれを解決しない(と私はバウンドプロパティの値をキャッシュした行の前にdetectChanges()の呼び出しを入れていませんでした)。 –

+0

ええ、私は確信していませんでした... あなたのコンポーネントのコンストラクタの欠如とは何か関係がありますか? –

+0

親コンポーネントにChangeDetectorRefを置き、 'this.child.onParentInvoke()'を呼び出す前にdetectChanges()を呼び出すと、それが機能することが判明しました。投稿を更新すると、私はあなたに信用を与えるでしょう。 –

関連する問題