使用window.location重定向时,ngStorage无法正常工作

时间:2015-01-01 18:17:14

标签: window.location angular-local-storage

我在使用ngStorage模块设置$ storage var之后尝试进行重定向。这不起作用,我找不到原因。

我的代码如下:          

  <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>

如果我删除window.location行,它会正常工作。

我是否以错误的顺序做某事?

4 个答案:

答案 0 :(得分:2)

@claireablani已经回答了here这个问题。 似乎在应用localStorage上的修改之前发生了页面重新加载。

您可以使用@raynode(Github here的ngStorage库的分支,在凉亭上不可用),它添加$save()方法以确保已应用修改。

答案 1 :(得分:2)

$localStorage.$apply();

为我做了伎俩

感谢这个github issue comment

答案 2 :(得分:0)

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

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

使用的模块:ngStorage

OR

  

$ localStorage.apply();   //在localstorage中添加值后,使用此方法。不需要超时。

答案 3 :(得分:0)

我也遇到过这个问题。我试图在服务中更新localStorage,但似乎没有用。至少不在承诺内。尝试$ localStorage。$ apply()和$ timeout,但它没有用。我必须在控制器中移动代码才能使其正常工作。

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