簡體   English   中英

Angular-$ watch檢查服務狀態

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM