2015-07-07 3 views
0

У меня здесь немного проблем.Загрузка данных перед загрузкой контроллеров и просмотров

У меня есть приложение AngularJS, которое подключается к API и позволяет пользователям входить в систему, регистрироваться и т. Д. Пользователь получает токен, который затем сохраняется в $ localStorage (через ngstorage).

$localStorage[JWT] = data.token; 

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

Я искал разные способы сделать это, но я не мог понять. Любые указатели оцениваются!

Спасибо.

+0

Вы не можете доверять «localStorage». Он может удалять, если пользователь удаляет файлы cookie или сеансы из браузера. Ваш код может не работать в этом состоянии. – Vineet

+0

Посмотрите на угловой-ui-router и $ stateChangeStart. Handy URL - http://brewhouse.io/blog/2014/12/09/authentication-made-simple-in-single-page-angularjs-applications.html –

ответ

0

Вы можете использовать модуль ngRoute по умолчанию для таких простых случаев.

Сначала вы настраиваете маршрут с помощью свойств разрешения по умолчанию. Здесь мы говорим, что решение должно содержать список фильмов.

app.config(function($routeProvider){ 
    $routeProvider.when('/',{ 
    templateUrl:'initial.html', 
    controller:'MainCtrl' 
    }) 
    .when('/two',{ 
    templateUrl: 'post.html', 
    controller: 'PostCtrl', 
    resolve: { 
     movieList: function($movies) { 
     return $movies.get(); 
     } 
    } 
    }) 
    .otherwise({ 
    redirectTo:'/' 
    }); 
}); 

Во-вторых, нас интересует подключение к критическим событиям угловой системы. Следовательно, для этого небольшого примера приложения мы хотим, чтобы отключить кнопки используется, чтобы вызвать изменение страницы, а также показать текст loading...когда начинается процесс изменения страницы ...

(app.js):

app.controller('MainCtrl', function($scope, $location) { 
    $scope.go = function() { 
    $location.path('/two'); 
    }; 

    $scope.$on('$routeChangeStart', function(evt){ 
    $scope.showLoading = true; 
    }); 

    $scope.showLoading = false; 

}); 

(initial.html):

<a href="#/two" class="btn btn-default" ng-disabled="showLoading">Go</a> 
<br> 
<p ng-if="showLoading" style="color:red">Loading...</p> 

Весь код here

Дополнительная информация о ngRoute

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