2014-05-12 3 views
1

두 컨트롤러가 공유 서비스를 사용하여 통신하는이 코드가 있습니다. 어떤 이유 $scope.$on를 들어

var app = angular.module('AdminApp', ['ngRoute']); 

app.factory('SharedService', function ($rootScope) { 

    var sharedService = { 

     userId: [], 

     BroadcastUserId: function (id) { 
      this.userId.push(id); 
      $rootScope.$broadcast('handleBroadcast'); 
     } 
    }; 
    return sharedService; 
}); 

app.config(function ($routeProvider) { 

    $routeProvider.when('/login', { 
     templateUrl: "adminLogin.html" 
    }); 

    $routeProvider.when('/main', { 
     templateUrl: 'adminMain.html' 
    }); 

    $routeProvider.otherwise({ 
     redirectTo: '/login' 
    }); 
}); 

app.controller('authCtrl', function ($scope, $http, $location, SharedService) { 

    $scope.Userid = ''; 
    $scope.authenticate = function (user, pass) { 
     $http.post('http://localhost/NancyAPI/auth', { 
      UserName: user, 
      Password: pass 
     }).success(function (data) { 
      $scope.$broadcast('Token', data.Token); 
      $http.defaults.headers.common['Authorization'] = 'Token ' + data.Token; 
      $scope.Userid = data.UserId; 
      SharedService.BroadcastUserId($scope.Userid); 
      $location.path("/main"); 
     }).error(function (response) { 
      $scope.authenticationError = response.error || response; 
     }); 
    }; 

    $scope.$on('handleBroadcast', function() { 
     console.log('on'); 
    }); 
}).$inject = ['$scope', '$rootScope', 'SharedService']; 

app.controller('mainCtrl', function ($scope, $http, $q, SharedService) { 

    $scope.tests = []; 
    $scope.userId = -1; 

    $scope.getTests = function() { 
     var deferred = $q.defer(); 
     $http.get('http://localhost/NancyAPI/auth/tests/' + $scope.userId). 
      success(function (data) { 
       deferred.resolve(data); 
       $scope.tests = angular.fromJson(data); 
      }).error(function (response) { 
      }); 
    }; 

    // THIS IS NOT FIRING 
    $scope.$on('handleBroadcast', function() { 
     $scope.userId = SharedService.userId; 
    }); 
}).$inject = ['$scope', '$rootScope', 'SharedService']; 

는 있지만 mainCtrlAuthCtrl 컨트롤러에서 발사된다.

// THIS IS NOT FIRING 
     $scope.$on('handleBroadcast', function() { 
      $scope.userId = SharedService.userId; 
     }); 

왜 이런 일이 발생하며 어떻게 수정합니까?

+2

'mainCtrl' 컨트롤러가 활성화되어 있습니까? 바이올린에서 재현 할 수 있습니까? –

+0

아, 다른 템플릿에 있기 때문에 아닐 것 같아요 ... –

+0

방송은 mainCtrl이 아직 생성되지 않았지만이 문제를 해결하는 방법에 대해 지금 문제가 발생합니다. –

답변

3

종속성으로 {$ rootScope}를 제공하지 않은 미묘한 실수를했습니다. 일단 내가 그것을 정정하면, 그것은 나를 위해 일했다. 필자는 인라인 배열 주석 메커니즘을 사용하여 동일한 결과를 얻었습니다.

+2

더 자세히 설명 할 수 있습니까? – MegaMind

관련 문제