2013-07-19 3 views
3

내 페이지의 컨트롤러 인 컨트롤러가 있지만 각 페이지에서 액세스 할 수있는 AppLevel 컨트롤러가 가능한지 궁금 해서요 ... 각 페이지에 실제로 두 개 이상의 컨트롤러가 할당되었습니다.AngularJS : AppLevel 컨트롤러 가능?

나는 서비스로이를 수행하고 서비스를 주입 할 수 있지만 할당 할 수있는 일종의 applevel 컨트롤러가 필요하다고 생각한다.

가능한 경우 2 사이의 통신 방법은 무엇입니까? 나는 의존성 주입을 사용하고 메인 프레임에 applevel 컨트롤러를 전달한다고 가정합니까?

누구나 이것에 대해 알고 싶습니까?

감사합니다.

답변

5

AngularJS는 범위가 부모 범위의 속성에 액세스 할 수 있도록 JavaScript 프로토 타입 상속을 사용합니다. HTML에 중첩 된 컨트롤러를 정의하고 자식에서 부모에 액세스 할 수 있습니다. 그러나 나는 강력하게 당신이 'AppCtrl'에 대한이 사실에 의존하지 말라고 촉구했다. 경우에 따라 작업중인 범위가 분리되어 AppCtrl의 범위에 액세스 할 수있는 상속 계층 구조의 일부가되지 않습니다.

나는 이것을위한 서비스를 제안하거나 $ rootScope. $ on 및 $ rootScope. $ broadcast와 함께 pub/sub를 사용할 수 있습니다.

예를 조금 더 명확하게하기 위해 서비스 대신 shellCtrl과 쉘 서비스를 app 대신 사용하겠다.

'쉘'서비스의 역할은 응용 프로그램의 다른 컨트롤러, 지시문 또는 서비스가 shellController 및 호스트보기 컨테이너와 상호 작용할 수있게하는 것입니다.

이제 범위 계층에 의존하지 않고 분리 된 방식으로 상위 컨트롤러의 속성을 설정할 수 있습니다.

+0

고마워, 네가 결국 한 일. 나는 서비스를 만들었다. – Martin

1

각도가있는 하위 컨트롤러를 사용하는 경우 상위 범위에서 상속됩니다. 그래서 만약 여러분이 하나의 최상위 컨트롤러에 하위의 컨트롤러가 가지고 있지 않은 함수를 가지고 있다면 최상위 함수 (또는 범위 객체)가 참조 될 것입니다. 자식 컨트롤러 중 하나가 함수의 로컬 버전 (또는 범위의 속성)을 정의하면 부모 컨트롤러에서 더 이상 상속받지 않습니다.

바이올린 : http://jsfiddle.net/Y9yEQ/

html로

<div ng-app="myApp" ng-controller="TopLevelCtrl"> 
    <button ng-click="testing()">Yo top level!</button> 
    <button ng-click="testing2()">Yo top level 2!</button> 
    <div ng-controller="ChildCtrl"> 
     <button ng-click="testing()">Yo child!</button> 
     <button ng-click="testing2()">Yo child2!</button> 
    </div> 
</div> 

JS

angular.module("myApp",[]).controller("TopLevelCtrl", function($scope){ 
    $scope.testing = function() { 
     alert("just testing"); 
    } 
    $scope.testing2 = function() { 
     alert("just testing parent"); 
    } 
}).controller("ChildCtrl", function($scope){ 
    $scope.testing2 = function() { 
     alert("just testing child"); 
    } 
}) 

당신이 컨트롤러의 인스턴스를 생성하거나 파괴 될 수 있기 때문에 (다중 컨트롤러 사이에 데이터를 공유해야하는 경우 그들이 추가/제거 될 때보기 지원) 서비스를 사용하고자합니다. 컨트롤러에 대한 엄격한 구조를 가지고 있다면 범위를 통해 이벤트를 버블 링하거나 $ 브로드 캐스트를 통해 범위를 통해 이벤트를 보낼 수 있습니다.

+0

멋지다 ... 기본 앱 컨트롤러가있는 경우 하위 컨트롤러에서 주 앱 컨트롤러에 값을 설정하고 값을 설정하는 방법은 무엇입니까? – Martin