让$ routeProvider监听$ rootscope。$ broadcast

时间:2012-10-30 13:27:04

标签: javascript angularjs

我已将此模块添加到我的应用中: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:'/'});
})

1 个答案:

答案 0 :(得分: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>

以上控制器现在将出现在所有视图中,并确保注册您的听众。