2016-02-26 2 views
0

Так что, когда мой пользователь входит в меня этот кодrootScope получает undifined при изменении маршрута

var promise = UserFactory.doLogin(userCredentials); 

promise.success(function (data, status) { 

    //set some localstorage vars 
    //only on login's success get additional data 

    var anotherPromise = UserDataFactory.getUserData();         
    anotherPromise.success(function (data, status){          
      if(data.code == 2){              
       $rootScope.userHead = true; 
      } 

}); 

$rootScope.userHead = true; будет показать/скрыть подменю в соответствии с его значением (истина/ложь). HTML в подменю является

<div class="panel panel-default text-center" style="text-align: center;" ng-hide="userHeader">

страница, которая включает в себя меню, включен в некоторых страницах с <div id="submenu" ng-include="'submenu.html'" ></div>. Эти страницы находятся в маршрутах как так

  .when('/user', {      
       templateUrl: 'user.html',       
       controller: 'userController', 
       animation: 'second', 
       access: { 
        requiredLogin: true 
       } 
      }) 
      //user.html includes menu with ng-include="'submenu.html'" 

Когда я иду на страницу пользователя, $rootScope.userHead имеет значение и подменю скрыта, как это должно быть. Если я нажму обновить, $rootScope.userHead будет undifined, и я вижу подменю.

Я не вижу перезаписи на $rootScope.userHead. Разве это теряет свою ценность, когда я перехожу на другую страницу? Должен ли он сохранить свою ценность?

Что мне не хватает? Как это исправить?

Благодаря

+0

При обновлении приложение перезапускается с нуля. Все экземпляры служб и переменных переопределены. Вы просто не можете обновить угловое приложение и mantain non persistent variables. –

+0

@ItaloAyres спасибо. Итак, что вы предлагаете? Должен ли я сохранять «userHead» в другом месте? Поместите его в локальное хранилище вместо Углового, например? – slevin

+0

Может быть. Но если при запуске приложения вы используете LoginService, чтобы узнать, был ли пользователь уже зарегистрирован или что-то в этом роде, вы можете установить этот конфиг в этой службе. Если вы поймете, что я имею в виду. –

ответ

0

Если вы перезагрузить страницу все данные, которые хранятся в JavaScript переменные являются потеряли. $rootScope - не более чем переменная в JavaScript. Если вы хотите сохранить то, что сохраняется в перезагрузке страницы есть, по крайней мере, следующие возможности:

  • использовать Cookie (в угловой можно использовать $ CookieStore)
  • использовать некоторые новые функции HTML5, как Locale Хранение, веб-DB или старый DOM Storage (http://en.wikipedia.org/wiki/Web_storage)
  • хранить данные на сервере
  • ngStorage

Автор: Micheal.

Смежные вопросы