ngStorage not working properly when redirect using

2019-05-05 18:57发布

问题:

I'm trying to do a redirect after set a $storage var, using ngStorage module. This is not working, and I can't find out why.

My code is below:

  <head>
    <script data-require="angular.js@1.1.5" data-semver="1.1.5" src="http://code.angularjs.org/1.1.5/angular.min.js"></script>
    <script src="https://rawgithub.com/gsklee/ngStorage/master/ngStorage.js"></script>

    <script>
        angular.module('app', [
          'ngStorage'
        ]).

        controller('Ctrl', function (
          $scope,
          $localStorage
        ) {
            $scope.$storage = $localStorage.$default({                
                array: []
            });
            $scope.Redirect1 = function () {
                $scope.$storage.array = ['pineapple', 'pear', 'peach'];
                window.location.href = 'http://localhost:61267/Page1.aspx?q=fruitsp';
            };
            $scope.Redirect2 = function () {                
                $scope.$storage.array = ['blackberry', 'banana', 'blueberry'];
                window.location.href = 'http://localhost:61267/Page1.aspx?q=fruitsb';
            };
        });
    </script>
  </head>

  <body ng-controller="Ctrl">    
    {{$storage|json}}
    <br/>
    <button ng-click="Redirect1();">Change Array</button><br/>
    <button ng-click="Redirect2();">Change Array2</button>
  </body>

</html>

If I remove the window.location rows, it work normally.

Am I doing something in the wrong order?

回答1:

This problem has been answered here by @claireablani. It seems that page reloading occurs before modification on localStorage has been applied.

You can use a fork of ngStorage library by @raynode (Github here, not available on bower) which add a $save() method to ensure modification had been applied.



回答2:

$localStorage.$apply();

did the trick for me

thanks to this github issue comment



回答3:

var setLocalStorage = function (token, uname)
{
$localStorage.token = token;
$localStorage.name = uname;

}
$timeout(setLocalStorage(token, userForm.uname), 500);

Module Used : ngStorage

OR

$localStorage.apply(); //Just after adding values in localstorage use this. No timeout required.



回答4:

I also ran into this issue. I was trying to update localStorage in a service and it didn't seem to work. At least not inside a promise. Tried $localStorage.$apply() and $timeout there, but it didn't work. I had to move the code inside my controller to make this work.

$scope.$localStorage.myVar = 'test';
$scope.$localStorage.$apply();
$state.go('app.home');