我正在开发一个新项目,在第一阶段,我想通过向/ api / me发送XHR HEAD请求来检查用户是否与服务器进行了会话。
我想使用以下语法
$rootScope.$on("$routeChangeStart", function(event, current, previous, rejection){/*...*/})
问题是我不想为每个控制器重写这个代码,有没有办法以通用方式执行此操作?,。run?,service(factory),哪种方式是正确的?
请提供一些简短的代码,因为我是这个框架的新手。
var app = angular.module('home', []);
var httpConfig = {withCredentials: true};
app.config(function($routeProvider){
$routeProvider.
when('/',
{
template: 'views/home.html',
controller: homeCtrl
}).
when('/login',
{
template: 'views/login.html',
controller: loginCtrl
}).
when('/logout',
{
template: 'views/logout.html',
controller: logoutCtrl
}).
otherwise(
{
template: 'views/home.html',
controller: homeCtrl
})
}).
run(function($rootScope, authUser){
$rootScope.$on('$routeChangeStart', function () {
authUser($rootScope);
})
}).
factory('authUser', function($http, httpConfig){
var promise = $http.head('/users/me', httpConfig);
})
答案 0 :(得分:1)
您可以尝试使用$ routeProvider解析如下:
app.config(function($routeProvider){
$routeProvider.
when('/',
{
template: 'views/home.html',
controller: homeCtrl,
resolve:{auth:"authUser"}
}).
when('/login',
{
template: 'views/login.html',
controller: loginCtrl ,
resolve:{auth:"authUser"}
}).
when('/logout',
{
template: 'views/logout.html',
controller: logoutCtrl,
resolve:{auth:"authUser"}
})
此外,您可能需要更改工厂功能以返回承诺:
app.factory('authUser', function($http, httpConfig){
return $http.head('/users/me', httpConfig);
})