2014-12-02 4 views
1

화면의 일부를 업데이트하는 컨트롤러가 있습니다. 때로는 사용자가 서버 측에서 해당 지역의 내용을 무효화하는 작업을 수행하기도합니다. 그렇다면 사용자가 다른 곳에서 버튼을 클릭하면 다른 컨트롤러를 업데이트 할 수 있습니까? 그와 같은 일반적인 패턴을 따랐습니다. 즉 :AngularJS : 다른 컨트롤러 또는 JS에서 컨트롤러 업데이트 기능 호출

appControllers.controller('linksController', ['$scope', '$filter', '$interval', function ($scope, $filter, $interval) { 

    $scope.update = function() { 
     // update code here... this is what I want to invoke from another function or area of JS 
    } 
+0

데이터에 따라 적합한 공유 데이터를 제공하는 서비스를 사용하거나 스코프 (방출/방송)의 pub/sub 메소드를 사용하는 것이 좋습니다. 전역 유형의 이벤트이고 rootScope가 전송하는 것이 합리적이라면 pub/sub 접근 방식을 옹호합니다. 그렇지 않으면 서비스 접근 방식이 모듈성을 위해 더 좋을 것입니다. –

+0

위에서 언급 한'$ emit'과'$ on' 또는 $ broadcast'를 체크 아웃하십시오. @ MattWhipple의 요지에 따라, 이벤트를 사용하지 않는다면 공장을 사용하십시오. 범위에 모든 것을두면 코드가 단위 테스트에 훨씬 더 어려워집니다. – wootscootinboogie

+0

조언을 주셔서 감사합니다, 방송 물건은 유망 해 보입니다 – Chris

답변

5

이 경우 공유 서비스/공장을 사용할 수 있습니다.

로드 된 데이터를 한 컨트롤러에서 다른 컨트롤러로 전달하려는 경우 $broadcast/$emit 기능을 사용하여 "공유 서비스"와 브로드 캐스트 이벤트를 통해 전달할 수 있습니다. 브로드 캐스트 이벤트는 모든 컨트롤러에서 $scope.$on으로들을 수 있습니다.

angular.module("appControllers", []).factory("sharedService", function($rootScope){ 

     var mySharedService = {}; 

     mySharedService.values = {}; 

     mySharedService.passData = function(newData){ 
      mySharedService.values = newData; 
      $rootScope.$broadcast('dataPassed'); 
     } 

     return mySharedService; 
    }); 

    appControllers.controller('linksController', ['$scope', 'sharedService', function ($scope, sharedService) { 
     $scope.update = function(newData){ 
      sharedService.passData(newData); 
     }; 
    } 

    appControllers.controller('anotherController', ['$scope', 'sharedService', function ($scope, sharedService) { 
     $scope.$on('dataPassed', function() { 
      $scope.newItems = sharedService.values; 
     }); 
    } 
+0

이것은 내가 겪은 것처럼 보입니다. 감사합니다 – Chris

+0

'$ rootScope. $ emit'과'$ rootScope. $ on'는 훨씬 빠르게 작동합니다. –

관련 문제