angularjs and localStorage change event

前端 未结 4 1805
梦如初夏
梦如初夏 2020-12-09 03:14

I store some data in the localStorage

what I want in my angularjs app is that when the data in the localStorage changed, the app rerender the app, how can I do this?

相关标签:
4条回答
  • 2020-12-09 03:19

    There is an angular localStorage module:

    https://github.com/grevory/angular-local-storage

    var DemoCtrl = function($scope, localStorageService) {
    
      localStorageService.clearAll();
    
      $scope.$watch('localStorageDemo', function(value){
        localStorageService.add('localStorageDemo',value);
        $scope.localStorageDemoValue = localStorageService.get('localStorageDemo');
      });
    
      $scope.storageType = 'Local storage';
    
      if (!localStorageService.isSupported()) {
        $scope.storageType = 'Cookie';
      }
    
    };
    

    After further thought you may need to change the module to broadcast on setItem so that you can get notified if the localStorage has been changed. Maybe fork and around line 50:

    localStorage.setItem(prefix+key, value);
    $rootScope.$broadcast('LocalStorageModule.notification.setItem',{key: prefix+key, newvalue: value});  // you could broadcast the old value if you want
    

    or in the recent version of the library the casing was changed

    $rootScope.$broadcast('LocalStorageModule.notification.setitem',{key: prefix+key, newvalue: value}); 
    

    Then in your controller you can:

    $scope.$on('LocalStorageModule.notification.setItem', function(event, parameters) {
       parameters.key;  // contains the key that changed
       parameters.newvalue;  // contains the new value
    });
    

    Here is a demo of the 2nd option: Demo: http://beta.plnkr.co/lpAm6SZdm2oRBm4LoIi1

    ** Updated **

    I forked that project and have included the notifications here in the event you want to use this project: https://github.com/sbosell/angular-local-storage/blob/master/localStorageModule.js

    I believe the original library accepted my PR. The reason I like this library is that it has a cookie backup in case the browser doesn't support local storage.

    0 讨论(0)
  • 2020-12-09 03:27

    I recently created a module allows you to simply bind a localStorage key to a $scope variable and also store Objects, Arrays, Booleans and more directly inside the localStorage.

    Github localStorage Module

    0 讨论(0)
  • 2020-12-09 03:41

    Incidentally, I've created yet another localStorage module for AngularJS which is called ngStorage:

    https://github.com/gsklee/ngStorage

    Usage is ultra simple:

    JavaScript

    $scope.$storage = $localStorage.$default({
        x: 42
    });
    

    HTML

    <button ng-click="$storage.x = $storage.x + 1">{{$storage.x}}</button>
    

    And every change is automagically sync'd - even changes happening in other browser tabs!

    Check out the GitHub project page for more demos and examples ;)

    0 讨论(0)
  • 2020-12-09 03:43
    $scope.$on("LocalStorageModule.notification.setitem", function (key, newVal, type) {
          console.log("LocalStorageModule.notification.setitem", key, newVal, type);
        });
    
    $scope.$on("LocalStorageModule.notification.removeitem", function (key, type) {
      console.log("LocalStorageModule.notification.removeitem", key, type);
    });
    
    $scope.$on("LocalStorageModule.notification.warning", function (warning) {
      console.log("LocalStorageModule.notification.warning", warning);
    });
    
    $scope.$on("LocalStorageModule.notification.error", function (errorMessage) {
      console.log("LocalStorageModule.notification.error", errorMessage);
    });
    

    this event calling when using https://github.com/grevory/angular-local-storage#getstoragetype

    in app config

    myApp.config(function (localStorageServiceProvider) {
      localStorageServiceProvider
        .setPrefix('myApp')
        .setStorageType('sessionStorage')
        .setNotify(true, true)
    });
    
    0 讨论(0)
提交回复
热议问题