2017-01-02 45 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的以前的數據不是新的。

發生這種情況是因爲雙向=綁定使用觀察器將數據從隔離範圍傳輸到父範圍。這在ng-change操作之後的髒檢查週期發生。

要立即提供該分離範圍值,其公開爲一個局部變量:

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

用法:

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

通過暴露模型作爲局部變量,它立即可用於父範圍中的功能。

The DEMO on JSFiddle

+0

這裏的錯誤是'ng-change =「$ ctrl.onChng({$ model:$ ctrl.model})'這個會正確傳遞值,但是我想要的是一個可定製的函數,參數該函數應該在調用該組件的父控制器中給出,在更改時只需觸發該函數。 –