Ionic app global AppCtrl, это правда?
Это уже третий раз за неделю, когда я вижу какой-то код, использующий в своем приложении такой же AppController
<body ng-app="app" ng-controller="AppCtrl">
<div id="inner" ng-view="" ></div>
</body>
И в контроллере они перенаправляют на разные части приложения, как это
.controller("AppController",function({$location}{
if(isUserAthenticated){
$location.path("/home");
}else{
$location.path("/login")
}
});
Это правильный способ сделать это. Потому что мне это не кажется. Я считаю этот подход очень хакерским, и должен быть правильный способ сделать это. Не могли бы вы, ребята, сообщить мне лучший и рекомендуемый способ справиться с такими сценариями?
ОБНОВЛЕНИЕ: Конфигурация маршрутизации
// delete $httpProvider.defaults.headers.common["Access-Control-Request-Headers"];
$routeProvider
.when('/app', {
templateUrl: 'views/login.html',
controller: 'AppCtrl'
}).
when('/privados', {
templateUrl: 'views/privados.html',
controller: 'PrivadosCtrl as ctrl'
}).
when('/mensaje/:id', {
templateUrl: 'views/mensaje.html',
controller: 'MensajeCtrl as ctrl'
}).
when('/grupales', {
templateUrl: 'views/grupales.html',
controller: 'GrupalesCtrl as ctrl'
}).
when('/comunicados', {
templateUrl: 'views/comunicados.html',
controller: 'ComunicadosCtrl as ctrl'
}).
when('/contactos', {
templateUrl: 'views/contactos.html',
controller: 'ContactosCtrl'
}).
when('/perfil', {
templateUrl: 'views/perfil.html',
controller: 'PerfilCtrl'
}).
when('/principal', {
templateUrl: 'views/principal.html',
controller: 'PrincipalCtrl as ctrl'
}).
when('/nmensaje/:type', {
templateUrl: 'views/nmensaje.html',
controller: 'NMensajeCtrl as ctrl'
}).
when("/user/password",{
templateUrl:"views/passwordreset.html",
controller: "ResetPasswordCtrl as ctrl"
}).
otherwise({
redirectTo: '/app'
});
1 ответ
Лучший способ, который я нашел для управления аутентификацией в приложении Angular, заключается в следующем:
Внутри .config()
метод вашего углового приложения:
//this event will be fired in every location change.
$rootScope.$on('$routeChangeSuccess', function(e, toState, fromState) {
if (toState.loginRequired) {
if (!isUserAthenticated()) {
e.preventDefault();
$location.path('/login');
}
}
});
Затем в ваших маршрутах вы можете указать, какой из них требует логин:
when('/nmensaje/:type', {
templateUrl: 'views/nmensaje.html',
controller: 'NMensajeCtrl as ctrl',
loginRequired: true
}).
when("/user/password",{
templateUrl:"views/passwordreset.html",
controller: "ResetPasswordCtrl as ctrl",
loginRequired: true
}).
Кроме того, вы можете создать Angular Factory для управления статусом аутентификации пользователя.
Обратите внимание, что при таком подходе вам не понадобится AppCtrl.