2016-09-12 5 views
0

Angularjs의 컨트롤러간에 개체를 공유해야하지만 작동하는 무언가를 만들었지 만 나에게는 조금 어색한 느낌이 듭니다. 나는 내가 가지고있는 것이 받아 들일 수 있는지, 그렇게 할 때 선호되는 방법이 있는지 궁금합니다. componentA에서 Angularjs의 구성 요소/컨트롤러간에 개체 액세스

은 내가 componentB에서 액세스 할 객체를 가지고있다.

app.component("componentA", { 
    controller: function ($scope, $rootScope, $compile) { 

     //the object whose contents I want 
     $scope.objectToAccess = {name: 'object', value: 3}; 

     //receives broadcast from componentB, returns the object 
     $rootScope.$on("getObject", function() { 
      $rootScope.$broadcast('receiveObject', $scope.objectToAccess); 
     }); 
    } 
} 

app.component("componentB", { 
    controller: function ($scope, $rootScope, $compile) { 

     $scope.object = {name : null, value: null}; 

     //receives the broadcast of the object and sets the value 
     $rootScope.$on("receiveObject", function (event,object) { 
      console.log(object); 
      $scope.object = object; 
     }); 

     //broadcast to get the object contents 
     $rootScope.$broadcast('getObject'); 
    } 
} 

이 방법은 효과가 있지만 너무 많은 앞뒤 통신으로 인해 너무 복잡합니다. 이런 종류의 물건을 처리하도록 특별히 고안된 Angular에 내장 된 것이 있습니까? 아니면 내가 받아 들일 수 있다고 생각합니까?

+0

나는 당신의 행함 (방송) 컨트롤러간에 통신 할 수있는 올바른 방법이 무엇인지 생각합니다. –

+0

예제에서 보았을 때,'componentA'와'componentB'의 관계가 무엇인지 알기는 어렵습니다. 그들은 형제 구성 요소입니까? 그렇다면, 상위 컴포넌트를 생성하는 것을 고려해보십시오.이 두 컴포넌트는'$ onChange' 이벤트를 수신하여 그에 따라 반응 할 수 있습니다. 당신이 작성한 것은 작동하지만 가능하다면'$ broadcast '를 대체하는 것이 바람직합니다. – mcranston18

+0

당신이 할 수있는 또 다른 일은 $ rootScope.objectToaccess = {name : 'object', value : 3} 과 같이 rootScope에 objectToaccess를 놓은 다음 모든 컨트롤러에서 $ rootScope.objectToaccess . 개체를 세계화하므로 권장하지 않습니다. 이렇게하는 가장 좋은 방법은이 objectToaccess 객체가있는 서비스를 만든 다음 objectToaccess에 액세스하려는 컨트롤러의 종속성으로 서비스를 전달하거나 삽입하는 것입니다. –

답변

1

내 생각에 $ scope 이벤트는 데이터 변경이 구독되고 요청되지 않은 경우에 사용해야합니다.

대신 당신은 데이터를 보유하고 컨트롤러에 참조하는 서비스를 사용할 수 있습니다. 서비스가 싱글 톤이기 때문에 컨트롤러는 동일한 인스턴스를 공유하므로 데이터를 쉽게 공유 할 수 있습니다.

+0

. 저는 아직 Angular에서 꽤 새롭기 때문에 서비스에 익숙하지 않습니다. 현재 상황과 관련 될 수있는 자습서 나 소스를 제공 할 수 있습니까? 나는 그것을 매우 감사 할 것이다. 감사. – user1852176

+0

(https://plnkr.co/edit/2t2zec8GHHoTc9zy4DnO?p=preview)이 쿵하는 소리 [링크]를 살펴 보자. 입력 상자에 입력 된 데이터는 구성 요소/컨트롤러간에 공유됩니다. –

+0

이렇게하려면 "상위"컨트롤러를 만들어야합니까? – user1852176