2012-09-07 7 views
4

각도 컨트롤러에서 자식 컨트롤러 안의 부모 컨트롤러에서 비트를 너무 많이 이동시키지 않으려 고합니다. 다음은 간단한 바이올린입니다. http://jsfiddle.net/terebentina/5RMPV/ 변경 버튼을 클릭하면 세 번째 글자가 'X'로 변경됩니다. 처음에는 item_change() 함수가 주 컨트롤러 내부에 있었고 $scope.items[idx] = 'X'을 수행하고있었습니다. 그러나 ItemCtrl 내부로 이동했기 때문에 세 번째 요소에 액세스하는 방법을 알지 못합니다.angularjs : 바깥 쪽 범위에서 내부 범위에 액세스하십시오.

도움을 주시면 감사하겠습니다.

+0

/그 모델의 메소드는 그 단일 컨트롤러의 함수입니다. 예를 들어, 여러 컨트롤러가 동일한 데이터/모델에 액세스해야 할 때와 같이 좀 더 복잡한 것이 필요할 때 $ scope를 사용할 수 있습니다. $ 이벤트를 내보내고 $ scope. $를 사용하여 이벤트를 수신하거나 (더 좋은 방법은) 할 수 있습니다. Gloopy가 보여주는 것 : 모델의 데이터 (및 행동/기능)를 서비스에 넣은 다음 컨트롤러가 주입을 통해 액세스하도록합니다. –

+0

처음에는 item_change() 메서드를 사용하는 실제 js 객체를 만들려고 했으므로 $ scope.items [3] .item_change()를 호출 할 수 있었지만 너무 잔인 할 수 있습니다. 지금 Gloopy의 제안과 함께 갈 것입니다. 감사합니다 –

답변

6

메인 컨트롤러 밖으로 물건을 이동하는 한 가지 방법은 서비스 또는 공장 내부 컨트롤러간에 데이터를 공유하고 모두 변경하는 것입니다 (this article).

여기에 updated fiddle입니다. 당신은 당신이있는 항목의 데이터에 액세스 할 것이 어떤 컨트롤러로 itemsService를 삽입해야합니다. 간단한 데이터, 모델의 데이터 ($ 범위를 통해) 단일 컨트롤러와 연결되어 모델링 및 동작에 대한

angular.module('test', []) 
    .service('itemsService', function(){ 
     var items = ['A', 'B', 'C', 'D']; 

     return{ 
      getItems: function(){ 
       return items; 
      }, 
      changeItem: function(index, value){ 
       items[index] = value; 
      } 
     } 
    }) 
    .controller('MainCtrl', function($scope, itemsService) { 
     $scope.items = itemsService.getItems();  

     $scope.change = function(idx) { 
      itemsService.changeItem(idx, 'X'); 
     } 

    }) 
+0

오 ... 말이 되네. 아직도 "각도 방식"주위에 내 머리를 포장. 감사 –

관련 문제