2014-09-11 3 views
0

Я получаю страницу входа в систему, которая была выполнена в первый раз с использованием Ionic Mobile Framework и только что недавно выученной Angular JS. Когда страница входа в систему запускается, я хочу перейти на домашнюю страницу только в том случае, если сеанс не истек. В противном случае мы хотим перейти на страницу входа в систему. Он отлично работает взад и вперед между экраном/состоянием входа/выхода и экраном входа/состоянием входа, но у меня есть одна проблема.Ионный: Угловой контроллер не работает при запуске приложения

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

Суть в том, что контроллер не запущен при запуске приложения, и я не могу понять, почему независимо от того, сколько я делаю в Google. Ниже приведен пример кода.

.run(function($ionicPlatform, $cordovaSplashscreen, localstorage, $state) { 

    setTimeout(function() { 
    $cordovaSplashscreen.hide() 
    }, 1500) 

    $ionicPlatform.ready(function() { 
    // Hide the accessory bar by default (remove this to show the accessory bar above the keyboard 
    // for form inputs) 
    if(window.cordova && window.cordova.plugins.Keyboard) { 
     cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true); 
    } 
    if(window.StatusBar) { 
     // org.apache.cordova.statusbar required 
     StatusBar.styleDefault(); 
    } 

    if(localstorage.get('subdomain') == undefined || 
     localstorage.get('subdomain') == 'null' || 
     localstorage.get('subdomain') == null || 
     localstorage.get('subdomain') == 'undefined' || 
     localstorage.get('subdomain') == "") 
    { 
     $state.go('subdomain'); 
    } 
    else 
     $state.go('songs'); 

    }); 
}) 



.config(function($stateProvider, $urlRouterProvider, $httpProvider) { 
    $urlRouterProvider.otherwise("/songs"); 

    $stateProvider 
    .state('login', { 
     url: "/login", 
     templateUrl: "templates/login.html", 
     controller: 'LoginCtrl' 
    }) 
    .state('subdomain', { 
     url: "/subdomain", 
     templateUrl: "templates/subdomain.html", 
     controller: 'SubdomainCtrl' 
    }) 
    .state('songs', { 
     url: "/songs", 
     templateUrl: "templates/songs.html", 
     controller: 'SongsCtrl' 
    }) 

    $httpProvider.interceptors.push('authInterceptor'); 

}); 

// register the interceptor as a service 
.factory('authInterceptor', function($q, $injector) { 
    return { 
    // optional method 
    'responseError': function(rejection) { 
     if(rejection.status == 0 || rejection.status == 403){ 
     $injector.get('$state').transitionTo('login',null,{ reload: true, inherit: true, notify: true }); 
     if(rejection.config.url.indexOf('login') > -1){ 
      navigator.notification.alert("Invalid username or password.", function(){}, "Login Failed"); 
     } 
     } 

     return $q.reject(rejection); 
    } 
    }; 
}) 

.controller('SongsCtrl', function($scope, $state, user) { 

    user.check(); //Resource that hits route on server 

    $scope.logout = function() 
    { 
    user.logout(); 
    $state.go('login'); 
    } 
}) 

Большое спасибо. James

ответ

0

Проблема была связана с неправильным ответом сервера, с которым перехватчик не мог справиться, а также с плохим инструментом отладки, который не позволил бы мне увидеть, запущен ли контроллер при запуске.

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