2016-07-28 104 views
0

在將此問題標記爲重複之前,請注意我不使用角度爲$localstorage的服務。如何查看本地存儲更改

我該如何看待本地存儲更改?

什麼,我現在是這樣的:

var isUnlocked = window.localStorage.getItem('isUnlocked'); 
     if(isUnlocked === "true") { 
     $scope.$apply(function() { 
     $scope.unlocked = true; 
     }); 
     } 

現在的問題是,改變第一個可見在刷新後是邏輯。我該如何改變這一點?

+0

是否想在另一個瀏覽器窗口中觀看localStorage? – k4l4m

+0

不,我只想觀察一個值是否已經改變,然後運行$ scope.unlocked。 $ scope.unlocked是一個ng-hide。只要值改變,它應該從屏幕上刪除內容。 – olivier

回答

2

使用$scope.$watch的函數返回您希望觀察的localStorage值。

function getValue(){ 
    return window.localStorage.getItem('isUnlocked'); 
} 

$scope.$watch(getValue, function(newValue){ 
    if (newValue === "true"){ 
     $scope.$apply(function(){ $scope.unlocked = true; }); 
    } 
}); 
+0

非常感謝! – olivier

0

您可以編寫一個包裝類,它在$ rootScope上發送一個事件,然後監聽需要更新的事件。

'use strict'; 

(function(angular) { 
    angular 
    .module('myModule') 
    .service('StorageService', ['$rootScope', function($rootScope) { 
     this.getItem = function(key) { 
     return localStorage.getItem(key) || undefined; 
     }; 
     this.setItem = function(key, value) { 
     localStorage.setItem(key, value); 
     $rootScope.$emit('STORAGE_SERVICE_' + key.toUpperCase() + '_UPDATED'); 
     } 
    }]); 
})(window.angular); 

(function(angular) { 
    angular 
    .module('myModule') 
    .controller('myController', ['$scope', 'StorageService', function($scope, StorageService) { 
     $scope.$on('STORAGE_SERVICE_ISUNLOCKED_UPDATED', function() { 
     var isUnlocked = StorageService.getItem('isUnlocked'); 
     if(isUnlocked === "true") { 
      $scope.$apply(function() { 
      $scope.unlocked = true; 
      }); 
     } 
     }); 
    }]); 
})(window.angular); 
相關問題