2014-12-08 4 views
1

자식 컨트롤러에서 부모 컨트롤러의 일부 변수를 액세스/수정하려고합니다. 이 변수는 약속입니다 (일부 $ http 요청) 그래서 자식 컨트롤러의 요소를 렌더링 할 때이 변수는 여전히 존재하지 않습니다.각 부모 및 자식 컨트롤러 통신

나는이 문제를 해결하는 데 도움이되는 ng-if를 사용하여 깨달았습니다. 그러나 두 범위는 통신 할 수 없습니다. 내 질문 :

  1. 양방향 범위에서 변수를 양방향으로 바인딩하려면 어떻게해야합니까? 이것을 올바른 방법일까요? ..
  2. 이 ng-if를 사용할 필요가없는 방법이 있습니까? 나는 거기에서 기다리는 2-3 가지 약속 변수를 가지고 있고, 요소에 여러 ng-if 문을 쓰고 싶지 않습니다. 이것이 가능한가?

http://jsbin.com/rahidukuvi/1/edit

답변

1

가장 간단한 방법은 상위 컨트롤러에서 아약스 콜백에 따라 어떤 변수 값 변화를 기다리는 아이 컨트롤러에서 $ 범위. $ 시계를 사용하는 것입니다. 자식 컨트롤러에서 $ scope. $ watch 콜백 안에서 변수 값을 적절하게 변경할 수 있습니다.

1

당신은 자식 컨트롤러가 값이 변경되었음을 알리기 위해 brodcast를 사용합니다. 그런 다음 자식 컨트롤러에서 해당 내용을 듣고 필요한 작업을 수행합니다. 아래 샘플 코드를 참조하십시오.

.controller('MyController', 
    function($scope, $interpolate, $timeout) { 

     //$scope.sssss = {}; 

     $scope.$watch('sssss.a', function() { 
      $scope.$broadcast('valueChanged', $scope.sssss) 
     }); 

     $timeout(function() { 
      $scope.sssss = { 
       a: '12345' 
      }; 
     }, 2000); 



    }) 
.controller('MyChildController', 
    function($scope, $interpolate, $timeout) { 
     $scope.$on('valueChanged', function(event, value) { 
      $scope.ttttt = value.a + '123'; 
     }); 


    }); 
+0

은 $ watch를 사용하는 유일한 방법입니까? 내가 왜하고 있는지 이유는 자식 컨트롤러에 여러 약속을 지키고 있는데 여러 $ watch를 가지고 있다면이 작업은 정말 복잡 할 것입니다 .... –

+0

하지만 부모 컨트롤러에서 시계를 만든 다음 신경 쓰이는 모든 하위 컨트롤러로 변경 하시겠습니까? 내가 잘못 이해하지 않으면 – user1325394

2

가장 좋은 방법은 컨트롤러간에 공유 할 수있는 (싱글 톤 패턴을 사용하는) 서비스를 만드는 것입니다.