2012-10-30 52 views
2

我已经添加了这个模块我的应用程序:https://github.com/witoldsz/angular-http-auth/blob/gh-pages/lib/http-auth-interceptor.js

这对401级的响应广播消息,非常方便!只是不知道如何让我的$ routeProvider监听$ rootscope。$ broadcast。我想重定向到401s上的登录页面。

我的$ routeProvide看起来是这样的:

var app = angular.module('demoApp', ['http-auth-interceptor','tastypieModule']) 
    .config(function($routeProvider) { $routeProvider. 
     when('/', {controller:HomeCrtl, templateUrl:'partials/home.html'}). 
     when('/sign-in', {controller:SiginInCtrl, templateUrl:'partials/sign-in.html'}). 
     otherwise({redirectTo:'/'}); 
}) 

回答

3

你不会让你的$ routeProvider听它。您只需在您的控制器中监听它,然后使用$ location将您的应用程序发送到适当的路线。

app.controller('MainAppCtrl', function($scope, $rootScope, $location) { 
    $rootScope.$on('event:auth-loginConfirmed', function(){ 
      $location.path('/'); 
    }); 
}); 

编辑:正如你可能有很多控制器,你会希望有一个包装的ngView父控制器...

<div ng-controller="MainAppCtrl"> 
    <div ng-view> 
    </div> 
</div> 

上述控制器现在用于所有意见,并确保注册你的听众。

+0

我的$ routeProvider将有很多控制器。我正在寻找一种倾听401s的全球方式。 –

+0

我会更新我的答案,以便更具体。 –

+0

Brill的作品(更有意义,但有此事件:“event:auth-loginRequired”)谢谢:) –