2013-09-23 3 views
0

일부 팩토리 메서드를 사용하여 두 컨트롤러간에 데이터를 공유하고 싶습니다. 컨트롤러 Ctrl1은 HTTP 요청이 전송되고 서버의 데이터가 스트리밍 방식으로 수신되는 첫 번째 DIV 태그에 속합니다. 그리고 다른 DIV 태그에서 첫 번째 DIV 태그가 업데이트되면서 계속 업데이트되는 목록 (ng-repeat)으로 해당 결과를 표시하려고합니다. 또한 첫 번째 DIV 태그가 첫 번째로 도착하자마자 두 번째 DIV 태그가 결과를 표시하기 시작합니다 응답 및 첫 번째 DIV 사라집니다). 컨트롤러간에 데이터를 한 번 전달하는 방법을 알고 있지만 (예 : ng-click = "pass()"),이를 달성하는 방법을 모르겠습니다. 나는 $ rootScope를 사용하지 않는 답을 찾고있다.업데이트를 계속하는 두 컨트롤러간에 데이터 공유

+0

등 : https://www.google.com/search?q=sharing+data+angular&oq=angularjs+sharing+data&sourceid=chrome&ie=UTF-8#q=angularjs+sharing+data+ – Cherniv

+0

나는 그것을 봤습니다. 하지만 동적 데이터 공유를 위해 찾은 대답은 $ rootScope를 사용합니다. 나는 가능한 한 다른 방법으로 그것을하는 대답을 찾고있다. 감사. – Sangram

+0

컨트롤러간에 데이터를 공유하기 위해 $ rootScope를 사용하고 싶지 않은 이유는 무엇입니까? –

답변

0

데이터를 포함하는 서비스를 만든 다음 각 컨트롤러에 서비스를 주입해야합니다. 예를 들어

는 'foo는'문자열 '바'를 같게하는 하나 개의 속성을 가진 '는 myService'서비스를 정의 할 수 있습니다 :

angular.module('myModule').service('myService', function() { 
    this.foo = 'bar'; 
}); 
우리는 지금 이렇게 같이 컨트롤러에서 이것을 사용할 수 있습니다

:

angular.module('myModule').controller('MyCtrl', function($scope, myService) { 
    $scope.myService = myService; 
}); 

이제 템플릿에서 {{myService.foo}} 또는 ng-model="myService.foo"으로 액세스 할 수 있습니다.

두 번째 컨트롤러에서 비슷한 방법으로 사용할 수 있습니다. 두 컨트롤러 중 하나에서 'foo'속성을 업데이트하면 컨트롤러간에 변경 사항이 유지됩니다. 이것은 각도의 서비스가 싱글 톤이기 때문입니다. 이런 식으로 서비스를 정의함으로써 당신이하고있는 일은 당신이 원할 때마다 주입 할 수있는 싱글 톤 'myService'를 만드는 것이며, 항상 한 번만 인스턴스화됩니다.

컨트롤러 코드 내의 변경 사항을 감시해야하는 경우 myService.foo에서 $ scope. $ watch()를 평소와 같이 사용할 수 있습니다.

관련 문제