Сохранить angular переменные после обновления страницы

Я пытаюсь найти способ сохранить переменные angular с обновлением страницы/между контроллерами. Мой рабочий процесс:

  • пользователь регистрируется через facebook и получает токен доступа
  • токен доступа пользователей будет использоваться с каждым запросом

Я пробовал два пути,

1 - Присвоение токена значению rootScope  Не работает

2 - Используя factory

#app.js
'use strict';

angular.module('recipeapp', [])
 .run(['$rootScope', '$injector', 'Authenticate', function($rootScope,$injector, Authenticate){
            $injector.get("$http").defaults.transformRequest = function(data, headersGetter) {
                $injector.get('$http').defaults.headers.common['auth-token'] = Authenticate.getToken();
             }
        }]);

#factory
'use strict';
angular.module('recipeapp')
  .factory('Authenticate', function(){
    var factory = {};
    var accessToken = "";

    factory.setToken = function(token) {
       accessToken = token;
    }
    factory.getToken = function() {
       return accessToken;
    }

    return factory;

  })

#facebook controller
I set the the token with every successful login
Authenticate.setToken(data.app_token);

Но проблема в том, что если я обновляю страницу, Authenticate.getToken() становится пустым. Я новичок в angular и не могу найти способ сохранить мои данные после обновления страницы.

любая помощь будет высоко оценена

Ответ 1

Вы можете использовать localStorage. Это действительно легко использовать.

var token = "xxx";
localStorage.setItem("token", token);
localStorage.getItem("token"); //returns "xxx"

Ответ 2

Когда вы обновляете страницу, весь ваш контекст JavaScript теряется (включая все данные, сохраненные в переменных).

Одним из способов получения информации от одной сессии к другой является использование браузера localStorage. В вашем случае вы, вероятно, захотите проверить ngStorage.

Ответ 3

вы можете использовать файлы cookie

Чтобы поставить простую переменную

$cookies.put('user', 'abc');

Чтобы сохранить объект

$cookies.putObject('objSocket', anyObject);

и для возврата данных из файлов cookie используйте

$cookies.getObject('objSocket');

и

$cookies.get('user');

Для использования вышеуказанного кода cookie.js cdnjs:

<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.0-rc.0/angular-cookies.min.js"></script>

Теперь добавьте $cookies в свой контроллер и ngCookies в свой app.js

для более подробной информации https://docs.angularjs.org/api/ngCookies

Ответ 4

Я сделал то же самое с помощью $window.localStorage.

Это похоже на принятый ответ.

var token = "xxx";
$window.localStorage.setItem("token",token);
$window.localStorage.getItem("token"); //returns "xxx"
$window.localStorage.removeItem("token"); //deletes token

Ответ 5

use `localStorage.setItem("key",value);` to set the value.
use `localStorage.getItem("key");`to get the value.
use `localStorage.clear();`to clear the value which is set