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.

Другие вопросы по тегам