[英]Angular - $watch to check service state
我正在使用AngularJS v1.4.8。 我定義了以下服務,以保持用戶現在正在編輯的表單:
orderApp.service('editAddressService', function(){
var currentEdit = '';
return {
getCurrentEdit: function(){
return currentEdit;
},
setCurrentEdit: function(value){
currentEdit = value;
},
clearCurrentEdit: function(){
currentEdit = '';
}
}
});
現在,我想在控制器中使用此信息,並收到有關任何更改的通知。 所以我寫了這個函數:
orderApp.controller('AddressController', ['editAddressService', '$scope', function(editAddressService, $scope){
var addressCtrl = this;
addressCtrl.editMode = false;
addressCtrl.toEditMode = function(){
addressCtrl.beforeEdit = angular.copy(addressCtrl.address);
addressCtrl.editMode = true;
editAddressService.setCurrentEdit(addressCtrl.addressType);
console.log("Check changes - "+editAddressService.getCurrentEdit());
};
...
//Check if user starts to edit another address widget. In this case
//close current editing form
$scope.$watch('editAddressService.getCurrentEdit()', function(newVal, oldVal){
console.log("New value - "+newVal);
console.log("My value - "+addressCtrl.addressType);
if(addressCtrl.addressType !== newVal){
addressCtrl.cancelEdit();
}
});
}]);
根據控制台輸出,值更改時不執行監視功能。 我錯過了什么?
$watch
可以使用函數調用的結果以及字符串:
$scope.$watch(function() {
return editAddressService.getCurrentEdit();
}, function(newVal, oldVal){
console.log("New value - "+newVal);
console.log("My value - "+addressCtrl.addressType);
if(addressCtrl.addressType !== newVal){
addressCtrl.cancelEdit();
}
});
請注意,該函數可以並且將經常被調用,因此請確保該函數不會使任何內容變異。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.