$ on not not catch $ broadcast

时间:2015-11-12 17:17:23

标签: javascript angularjs

我有一个Angular项目,我想要创建身份验证机制,所以我有以下控制器:

angular.module('authModule')
.controller('LoginCtrl', function($rootScope, $location, loginRESTService, UserService){
    var login = this;

    function signIn(user) {
        loginRESTService.login(user)
            .then(function(response) {
                console.log(response);
                user.access_token = response.user_id;
                UserService.setCurrentUser(user);
                $rootScope.$broadcast('authorized');
                $location.path("/formList");
            });
    }
})

另外我有一个带有以下方法的主控制器

angular.module('authModule')
.controller('MainCtrl', function ($rootScope, $state, LoginService, UserService) {
    var main = this;

    $rootScope.$on('authorized', function() {
        console.log("ENTRE CON PERMISO");
        main.currentUser = UserService.getCurrentUser();
    });

    $rootScope.$on('unauthorized', function() {
        console.log("ENTRE SIN PERMISO");
        main.currentUser = UserService.setCurrentUser(null);
        $state.go('login');
    });   
})         

它授权的问题'并且'未经授权的'从来没有被引用过,也不知道为什么

我的app.js文件

angular
  .module('pysFormWebApp', [
    ...
    'translateModule',
    'formModule',
    'authModule'
  ])
  .config(function ($routeProvider,  $httpProvider) {
    $routeProvider  
      .when('/', {
        templateUrl: 'views/main.html',
        controller: 'MainCtrl',
        controllerAs: 'main'
      })    
      .when('/login', {
        templateUrl: 'views/auth/login.html',
        controller: 'LoginCtrl',
        controllerAs: 'login'
      }) 
      .otherwise({
        redirectTo: '/'
      });      

我的index.html(只有一部分因为它太长而且是生成角度的索引)

    <div ng-controller="MainCtrl as main" >
        <button ng-if="main.currentUser" class="btn btn-default navbar-btn" ng-click="main.logout()">Logout <strong>{{main.currentUser.name}}</strong> 
        </button>
    </div>

1 个答案:

答案 0 :(得分:0)

首先,您没有播放“未经授权”的活动。因为$rootScope.on('unauthorized')无效。

二。也许是在登录控制器之前运行主控制器,并且因为你的控制器没有捕获事件。

让我知道它是否能解决您的问题。