2016-07-28 100 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); 
相关问题