有一项工作服务,但我在一个文件中声明它,其中包含 app.config 和 app.run
var app = angular.module("appTest", ['ui.router', 'ngCookies']);
app.service('AuthService', function ($cookies, $http, $location) {
return {
login: function (response) {
$cookies.put('token', response.data.access_token);
$http.defaults.headers.common['Authorization'] = 'Bearer ' +
response.data.access_token;
$location.path("/private");
},
logout: function () {
$cookies.remove('token');
$http.defaults.headers.common.Authorization = 'Basic';
$http.get("/api/account/logout")
.then(function onSuccess(response) {
$location.path("/");
})
.catch(function onError(response) {
console.log('Error')
});
},
checkUser: function () {
var token = $cookies.get('token')
if (token) {
return true;
} else {
return false
}
},
}
})
app.config(['$stateProvider', '$urlRouterProvider', '$locationProvider',
function ($stateProvider, $urlRouterProvider, $locationProvider,
$rootScope, toState) {
$urlRouterProvider.otherwise("/");
$stateProvider
.state('header', {
url: '/header',
templateUrl: '/app/pages/header.html'
})
.state('home', {
url: '/',
templateUrl: 'app/pages/home.html',
controller: 'HomeController',
authenticate: false,
})
.state('education', {
url: '/education',
templateUrl: 'app/pages/education.html',
controller: 'EducationController',
authenticate: false,
})
.state('blog', {
url: '/blog',
templateUrl: 'app/pages/blog.html',
controller: 'BlogController',
authenticate: false,
})
.state('contacts', {
url: '/contacts',
templateUrl: 'app/pages/contacts.html',
controller: 'ContactsController',
authenticate: false,
})
.state('films', {
url: '/films',
templateUrl: 'app/pages/films.html',
controller: 'FilmsController',
authenticate: false,
})
.state('books', {
url: '/books',
templateUrl: 'app/pages/books.html',
controller: 'BooksController',
authenticate: false,
})
.state('mistakes', {
url: '/mistakes',
templateUrl: 'app/pages/mistakes.html',
controller: 'MistakesController',
authenticate: false,
})
.state('login', {
url: '/login',
templateUrl: 'app/pages/login.html',
controller: 'LoginController',
authenticate: false,
})
.state('private', {
url: '/private',
templateUrl: 'app/pages/private.html',
controller: 'PrivateController',
authenticate: true,
});
}]);
app.run(['$rootScope', '$state', 'AuthService', '$location', function
($rootScope, $state, AuthService, $location) {
$rootScope.$on('$stateChangeStart',
function (event, toState, toParams) {
if(toState.authenticate)
{
if(!AuthService.checkUser())
{
$location.path("/login");
}
}
});
}
]);
在这个例子中,一切正常。授权服务也被接受并在其他控制器中工作。一旦我将它取出到另一个文件并在配置文件中服务,就会立即发生错误。$ingector。我希望一切都“像人一样”,在不同的文件中,因为您将来必须创建服务。谢谢
连接脚本的顺序
- 角度库
- 授权服务
- 应用程序配置
- 其他控制器
我已经多次更改订单,但无济于事。如果您将服务移动到最后一个位置,它将仅启动第一页的一部分。
这就是索引页面的样子。嗯,也许这很重要。还有一个问题,能不能和这个问题有关,那么项目中的电脑上没有node和npm?
<body ng-app="appTest">
<div>
<div ng-controller="HeaderController">
<div ng-include="'/app/pages/header.html'"></div>
</div>
<div class="margindiv" ui-view="">
</div>
</div>
我建议使用以下项目结构和连接脚本的顺序。
使用这种连接方式,不需要 node 和 npm。由于脚本是直接连接的。
不推荐使用侦听
$stateChangeStart器angular-ui-router > 1.0。因此,我使用了 $transition,但是对于您的问题的答案,我认为这不是必需的。他制作了授权原语——通过它被写入的
token按钮sessionStorage。