2014-07-22 2 views
0

에 컨트롤러 2에서 controller1에서 함수를 호출 :는 내 상 범위를 업데이트하는 컨트롤러가 AngularJS와

컨트롤러를 1

.controller("awardController", ['$scope', '$rootScope', 'Restangular', "$q", "$location", "TokenRestangular", 
    function ($scope, $rootScope, Restangular, $q, $location, TokenRestangular) { 


     $scope.updateAwardScope = function() { 
      resource = TokenRestangular.all('award'); 
      resource.getList() 
       .then(function (awards) { 
        $scope.awards = awards; 

       }) 
     } 

    }]) 

컨트롤러 2

나는 다른 컨트롤러가 2 이 컨트롤러 범위 밖에있는 클릭 이벤트로 아래의 컨트롤러가 컨트롤러 1의 $scope.updateAwardScope 기능을 호출 할 수 있습니까?

.controller('MainController', function ($rootScope, $scope) { 

$scope.updateAwardScopeClick = function() { 
    // somehow call function from controller 1 

    } 


}); 
+0

그것을 위해 공장을 사용하십시오받을 수 있습니다. – micronyks

+0

@micronyks는 답장을 보내 주셔서 감사합니다. 변수를 전달하기 위해 팩토리를 사용했지만 함수를 호출하는 데 어떻게 하나를 사용할 수 있습니까? – Prometheus

+0

공장 외에도 parent/$ rootScope 컨트롤러 안에 함수를 넣을 수도 있습니다. 모든 하위 컨트롤러가이를 사용할 수 있습니다. – lucuma

답변

1

나는 각 응용 프로그램에서 코드를 재사용하는 매우 효과적인 방법이 될 공장/서비스 패턴의 사용을 발견했습니다. 이 특별한 경우에는 AwardFactory를 만들고 컨트롤러에 삽입 한 다음 업데이트 함수를 호출 할 수 있습니다. 즉

AwardFactory

myApp.factory('AwardFactory', ['TokenRestangular', function(TokenRestangular.all) { 
    var factory = { 
    awards: [] 
    }; 

    factory.update = function() { 
    resource = TokenRestangular.all('award'); 

    resource.getList().then(function (awards) { 
     factory.awards = awards; 
    }); 

    return factory.awards; // You can skip the return if you'd like that 
    }; 

    return factory; 
}]); 

YourController

.controller('MainController', function ($rootScope, $scope, AwardFactory) { 

$scope.updateAwardScopeClick = function() { 
    AwardFactory.update(); 
} 
}); 

는 희망이 도움이!

1

당신은 각 브로드 캐스트를 사용하고

Controller1

.controller("awardController", ['$scope', '$rootScope', 'Restangular', "$q", "$location", "TokenRestangular", 
function ($scope, $rootScope, Restangular, $q, $location, TokenRestangular) { 


    $scope.updateAwardScope = function() { 
     resource = TokenRestangular.all('award'); 
     resource.getList() 
      .then(function (awards) { 
       $scope.awards = awards; 
       $rootScope.broadcast("update.awards"); 

      }) 
    } 

}]) 

컨트롤러 2

.controller('MainController', function ($rootScope, $scope) { 

    $rootScope.$on('update.awards', function(){ 
     $scope.updateAwardScopeClick(); 
    }); 

     $scope.updateAwardScopeClick = function() { 
     // somehow call function from controller 1 

     } 
     });