ngStorage не работает должным образом при перенаправлении с использованием window.location

Я пытаюсь сделать перенаправление после установки $storage var, используя модуль ngStorage. Это не работает, и я не могу понять, почему.

Мой код ниже:

  <head>
    <script data-require="[email protected]" 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, он будет работать нормально.

Я делаю что-то в неправильном порядке?


person Eduardo    schedule 01.01.2015    source источник


Ответы (4)


На эту проблему ответил здесь @claireablani. Кажется, что перезагрузка страницы происходит до того, как была применена модификация в localStorage.

Вы можете использовать ветвь библиотеки ngStorage от @raynode (Github здесь, недоступно в Bower), которая добавляет метод $save(), чтобы убедиться, что модификация была применена.

person Blackus    schedule 18.03.2015

$localStorage.$apply();

сделал трюк для меня

благодаря этому комментарию к проблеме github

person Pavel Bely    schedule 06.03.2017

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

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

Используемый модуль: ngStorage

OR

$localStorage.apply(); // Сразу после добавления значений в localstorage используйте this. Тайм-аут не требуется.

person HARIOM VASHISTH    schedule 03.05.2017

Я также столкнулся с этой проблемой. Я пытался обновить localStorage в сервисе, но это не сработало. По крайней мере, не внутри обещания. Пробовал там $localStorage.$apply() и $timeout, но это не сработало. Мне пришлось переместить код внутрь моего контроллера, чтобы это заработало.

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