我使用角度与ui-router和卫星来检查天气用户是否已登录。 这是我的示例代码:
var App = angular.module('myApp', ['satellizer', 'ui.router']);
App.config(function ($stateProvider, $urlRouterProvider) {
$urlRouterProvider.otherwise('/app/blank');
$stateProvider
.state('app', {
url: '/app',
abstract: true,
template: 'View<br><div ui-view=""></div>',
resolve: {
authorize: ['authService', function (authService) {
return authService.isLoggedin();
}]
}
})
.state('app.blank', {
url: '/blank',
title: 'Blank',
template: '<div>blank</div>'
})
.state('page', {
url: '/page',
template: 'Page<br><div ui-view=""></div>'
})
.state('page.login', {
url: '/login',
title: "Login",
template: 'Login'
});
});
App.factory('authService', function ($rootScope, $state, $auth) {
return {
isLoggedin: function () {
if (!$auth.isAuthenticated()) {
console.log('not logged in');
$state.go('page/login');
return true;
}
}
};
}
);
在$ stateProvider中,我使用resolve来检查用户是否已登录。如果不是脚本应该移动到状态页面/登录但它没有 - 它只是停止工作。如何修复该代码?
答案 0 :(得分:2)
使用$state.go('page.login');
代替$state.go('page/login');
(注意点!)
您应该更改为州名,而不是州的网址。
答案 1 :(得分:0)
如果$ state不起作用。检查$ injector是否工作并将$ state更改为$ injector,如下所示:
App.factory('authService', function ($rootScope, $injector, $auth) {
return {
isLoggedin: function () {
if (!$auth.isAuthenticated()) {
console.log('not logged in');
$injector.get('$state').go('page.login');
return true;
}
}