2017-03-23 10 views
2

ngOnInitですべての入力値を設定した後でngOnChangesをトリガーする方法を教えてください。 私のコード - >ngOnInitですべての入力値が設定された後でのみngOnChangesをトリガーする方法

`ngOnInit() { 
this.multiSelectorData.forEach(item=>{ 
      this.allItems.push(item.data); 
     }); 
} 
ngOnChanges(changes: SimpleChanges) { 
     if(changes['dataReady'] && changes['dataReady'].currentValue) { 
    console.log(this.allItems); 
}` 

は、私は文句を言わない、すべてがngonchangesをチェックする前に初期化されている場合、私がチェックすることができるか、ngonchangesがngonit前に呼び出されるので、私はngonchangesにngonitで初期化配列を取得?

+0

これは正常な動作です。 Angular 2 docsで[Lifecycle Hooks](https://angular.io/docs/ts/latest/guide/lifecycle-hooks.html)をご覧ください。 'ngOnChange'の代わりに' ngAfterViewInit() 'を試すことができます(Angularの後に応答するとコンポーネントのビューと子ビューが初期化されます) – mickdev

+1

はい、私はそれを知っています。 ngoninitが実行された後に入力内容の変更を聞く方法はありますか? – RemyaJ

+0

'ngOnInit()'の直後に 'ngDoCheck()'が実行されます(ただし、複数回実行されます)。反応的なフォームを使用している場合、ngOnChangeを保持し、フォームフィールドが設定されているかどうかを確認できます( 'if(this.form.get( 'yourField')。value)...)。あなたが今持っているものに似た何か。 – mickdev

答えて

0

私が見つけた1つの方法は、入力値がすべて以前の値プロパティを持つという事実に基づいています。入力が以前に設定されていない場合、その値はCD_INIT_VALUE(文字列として)になります。したがって、ngOnChangesのコードブロックは、前の値がCD_INIT_VALUEでない場合にのみ実行する必要があります。ここでは、すべての入力値をテストしているあなたのケースのための例です:

ngOnChanges(changes: SimpleChanges) { 
    let initialized: boolean = true; 
    for (let prop in changes) { 
    if (changes[prop].previousValue.toString() === 'CD_INIT_VALUE') { 
     initialized = false; 
     //we can break here since if any item is not initialized 
     //we will say the inputs are NOT initialized 
     break; 
    } 
    } 

    if (initialized) { 
    //code you want to execute 
    }  
} 

あり、よりエレガントな解決策は、おそらくですが、私はこの作品を見つけました。 これはおそらくあなたを助けるには遅すぎるかもしれませんが、私はこの質問を見つけた私はこれをgoogledときに他の人を助けるかもしれません。解決策は私がデバッグから考え出したものでした。

関連する問題