Я получаю страницу входа в систему, впервые используя Ionic Mobile Framework и только что изучив Angular JS. Когда запускается страница входа, я хочу перейти на домашнюю страницу, только если срок действия сеанса еще не истек. В противном случае мы хотим перейти на страницу входа в систему. Он отлично работает, переходя туда и обратно между экраном/состоянием «песен» выхода из системы и экраном/состоянием входа в систему, однако у меня есть одна проблема.
Когда приложение загружается, оно переходит к состоянию песен или «домашней» странице, однако оно не запускает код контроллера для этого состояния. В коде контроллера я нажимаю маршрут на нашем веб-сайте, чтобы увидеть, активен ли сеанс. Если это так, он вернет JSON, в противном случае мой authInterceptor возьмет на себя управление и переведет состояние в логин.
Суть в том, что контроллер не запускается при запуске приложения, и я не могу понять, почему, сколько бы я ни гуглил. Ниже приведен пример кода.
.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');
}
})
Спасибо большое. Джеймс