2

我正在开发一个新项目,在第一阶段,我想通过向 /api/me 发送 XHR HEAD 请求来检查用户是否与服务器进行了会话。

我想使用以下语法

$rootScope.$on("$routeChangeStart", function(event, current, previous, rejection){/*...*/})

问题是我不想为每个控制器重写这段代码,有没有办法以通用方式做到这一点?,.run?,服务(工厂),哪种方式是正确的?

请提供一个简短的代码示例,因为我是这个框架的新手。

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);
})
4

1 回答 1

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);
})
于 2013-08-04T09:59:17.843 回答