2017-01-02 4 views
0

は、COMxのは、 角1.5コンポーネント呼び出しNG-変更私はコンポーネントを持ってinfinitily

angular.component('comx', { 
    templateUrl: 'someUrl', 
    bindings: { 
     model: '=', 
     onChng: '=' 
    } 
} 

とそのHTMLが

<input ng-model="vm.model" ng-change="vm.onChng"> 

であると私は

のような他のテンプレートでは、このコンポーネントを追加していると言うことができます
<comx model="vm.data" on-chng="vm.test(vm.data)"> 

vm.test = function (val) { 
    console.log(val); // val is printing infinitly 
} 

上記の関数のコンソールは、継続して印刷されます。

+1

なぜ '&'を式に使用しないのですか?それは 'onChng: '&''でなければなりません。 –

+0

は既にそれを試みましたが、奇妙なことに、以前のvm.dataのデータは新しいものではありません。 –

+0

あなたはplunker/fiddleで問題を再現できますか? –

答えて

1

@pankj:なぜ&を式に使用しないのですか?

@amir:すでに試したことがありますが、奇妙なことに、以前のデータであるvm.dataは新しいものではありません。

2ウェイ=バインディングは、ウォッチャーを使用して隔離スコープから親スコープにデータを転送するために発生します。これは、変更操作後のダーティチェックサイクルで発生します。 、ローカル変数としてモデルを暴露することによって

<comx model="vm.data" on-chng="vm.test($model)"> 
</comx> 
vm.test = function (val) { 
    console.log(val); 
}; 

て:

angular.component('comx', { 
    template: '<input ng-model="$ctrl.model" '+ 
       '  ng-change="$ctrl.onChng({$model: $ctrl.model})">', 
    bindings: { 
     model: '=', 
     onChng: '&' 
    } 
}); 

使用:ローカル変数として公開、直ちに単離スコープ値を提供する

親スコープの関数に対してすぐに使用できます。

DEMO on JSFiddle

+0

ここで間違っているのは、コンポーネントのテンプレートに 'ng-change =" $ ctrl.onChng({$ model:$ ctrl.model}) 'です。これは正しく値を渡しますが、私が望むのはカスタマイズ可能な関数です。その関数はコンポーネントが呼び出される親コントローラ内で与えられなければなりません。 –

関連する問題