2014-09-03 2 views
1

Я создаю очень базовую систему входа с угловым JS. В принципе, после отправки формы входа учетные данные проверяются на базе базы данных с использованием PHP и Mysqli. Если все в порядке, оно возвращается успешно, и я устанавливаю переменную, как $rootScope.isLoggedIn = true, и данные пользователя в других аналогичных переменных.Основная разрешающая способность для угловой маршрутизации

Теперь я пытаюсь работать, лучший способ использовать resolve с моими маршрутами, так что только зарегистрированных пользователей или пользователей с необходимыми разрешениями могут получить доступ к странице (в том числе на перезагрузки страницы!)

Я просто не могу Я не понимаю, как работают эти решения. Моя маршрутизация выглядит (необходимо на странице панели пользователя нужно войти в систему), это до сих пор:

app.config(function($routeProvider) { 

    $routeProvider 

    //login 
    .when('/', { 
    templateUrl : 'framework/views/login.html', 
    controller : 'LoginCtrl', 
    title: 'Admin Login' 
    }) 

    //dashboard 
    .when('/dashboard', { 
    templateUrl : 'framework/views/dashboard.html', 
    controller : 'DashboardCtrl', 
    title: 'Dashboard', 
    resolve: { ? } 
    }) 

    //catch all redirect 
    .otherwise({ redirectTo: '/' }); 

}); 

ответ

1

Resolve откроет маршрут с разрешенной переменной (которая может быть введена в контроллер), как только он получает значение (мгновенно или когда возвращается обещание будет разрешено). См.:

resolve: { 
    myVar: function(service, $rootScope, etc){ 
     return service.obj; // or primitive, or promise or something else 
    } 
} 
.controller('DashboardCtrl', function(myVar){ 
    console.log(myVar); // that service.obj goes here 
} 

Это не может предотвратить загрузку маршрута (как я понимаю, пожалуйста, поправьте меня, если я ошибаюсь).

В вашем случае это лучше использовать что-то вроде этого:

.when('/', { 
    templateUrl : 'framework/views/login.html', 
    controller : 'LoginCtrl', 
    title: 'Admin Login', 
    authenticate: false 
}) 
.when('/dashboard', { 
    templateUrl : 'framework/views/dashboard.html', 
    controller : 'DashboardCtrl', 
    title: 'Dashboard', 
    authenticate: true 
}) 

$rootScope.$on("$routeChangeStart", function(event, toState){ 
    if (toState.authenticate && !$rootScope.isLoggedIn){ 
     $location.path('/'); 
    } 
}); 
+0

Я вижу логику, но она не работает для меня. Когда я делаю 'console.log (toState.authenticate)' ничего не получаю, но если я изменю '$ stateChangeStart' на' $ routeChangeStart', я получаю правильное значение, но вещь все еще не работает ... – Coop

+0

В Фактически, маршрут не останавливается от загрузки вообще, когда выполняется 'if statement'. Даже если я удалю 'if statement' и просто' event.preventDefault(); 'он не работает. – Coop

+0

Я вижу. Мой пример для ui-router - он отлично работает там. Быстрый поиск в googling показывает, что не может быть предотвращен запуск $ routeChangeStart. – gorpacrate

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