対処私は結合、私は私のコンポーネントAngluarjs
.component('selectionButton', {
bindings: {
parentForm : '<'
},
templateUrl: 'selection-button-component.html',
controller: 'selectionButtonController',
controllerAs: 'selBtnCtrl'
});
としてオブジェクトを渡している問題は、私のコンポーネントが初期化されたとき、私は渡しているオブジェクトがまだロードされていないということです私は私のページが完全にロードされた後、私はボタンをクリックしたときに私はトリガ機能、でvm.parentForm
を呼び出すが、私はいつもundefined
としてそれを得る私のコントローラで
vm.$onChanges = function(newObj){
if(angular.isDefined(newObj.parentForm.currentValue)){
vm.parentForm = newObj.parentForm.currentValue;
}
};
:そう$ onChangesフックに私はこれをしませんでした、たとえ私が値を変更したとしても$onChanges
。
vm.$onChanges
関数を調べると、vm.parentForm
の値がchangesObj.parentForm
に新しい値を取得していることがわかります。
どうすればこの問題を解決できますか?
編集:
私は次のようng-if
と私の要素をラップしようとした:
<span ng-if="fullPage.posteForm">
<selection-button parent-form="fullPage.posteForm" ></selection-button>
</span>
が、これは動作しませんでした。私も同様にうまくいかなかった双方向結合を試みました。
2つの可能な解決策。 1.バインディングを=に変更します。 2. htmlをラップするためにng-if = "vm.parentForm"を持っていれば、それが初期化されるとhtmlが再コンパイルされます。 –
これを解決するには、ng-ifは必要ありません。子コンポーネント内のonChangesを使用します。値が更新されるたびに、onChangesフックが子コンポーネント内でトリガーされるため、新しいオブジェクト値を割り当てることができます。 onChanges()= function(変更){ if(changes.parentForm.currentValue!== undefined){ this.parentForm = changes.parentForm.currentValue; } '' '' – rbinsztock
コンポーネントのローカルスコープを更新する必要はありません。バインディングの変更によって自動的に更新されるためです。 – Korte