2013-09-05 7 views
0

저는 AngularJs의 초보자입니다. 그래서 중요한 것을 놓친 것 같습니다.하지만 컨트롤러간에 정보를 공유하려면 대신 서비스를 사용할 수 있다고 생각합니까? 그렇습니다.AngularJS에서 중첩 컨트롤러를 사용하는 것이 맞을 때와 그렇지 않을 때?

컨트롤러는 뷰 (HTML)에 대해 알고 있어야하지만 경우에 당신은 우리가이 같은 중첩 된 컨트롤러를 사용하는 경우, 그것을 생각 :

<div ng-controller="ControllerA"> 
... 
    <div ng-controller="ControllerB"> 
    ... 
    </div> 
</div> 

과 ControllerB가 ControllerA 범위를 사용하는 경우, 우리가 커플 링됩니다 ControllerB와 ControllerA, 그리고 뷰 (html)는 html이 컨트롤러의 범위를 결정하기 때문에, 예를 들어 새로운 디자인으로 모든 html을 변경하려면 다음과 같이 변경하십시오.

<div ng-controller="ControllerA"> 
... 
</div> 

<div ng-controller="ControllerB"> 
... 
</div> 

그러면 th의 값이 변경됩니다. e view 또한 ControllerB 범위에 영향을 미치기 때문에 (ControllerA 범위를 사용하기 때문에) AngularJS의 중첩 된 컨트롤러는 반 패턴처럼 보이지만 어쩌면 내가 누락되었습니다.

올바른 사용법 AngularJs의 중첩 컨트롤러, 그렇지 않은 경우?

유스 케이스를 제공 할 수 있습니까?

감사합니다.

답변

1

예제에서 컨트롤러 계층 구조는 HTML 레이아웃의 부작용입니다.

그러나 기능에 본질적인 두 번 생각할 수 있습니다. 하나는 예를 들어 ng-repeat 지시어입니다. 하위 범위는 부모로부터 상속되며 이는 부모 범위가 자식을 집합으로 제어하기를 원하기 때문에 정확합니다.

두 번째는 논리적 단위입니다. 즉, 제품 용 페이지 세트를 작성하는 경우 부모 제품 컨트롤러를 만든 다음 제품 선택, 제품 추가, 제품 삭제를위한 하위 컨트롤러를 만들 수 있습니다. 이는 뷰 구현과 독립적 인 논리적 인 관계입니다. 그러나 이제는 부작용없이 여러 가지 방법으로 UI를 설정할 수 있기 때문에이 방법이 유용합니다. 예를 들어 목록이있는 표보기로 기본 설정 한 다음 경로를 사용하여 세부 정보보기로 전환 할 수 있습니다. 또는 같은 페이지의 왼쪽에 선택 사항을 넣기로 결정할 수 있으며 오른쪽의 세부 사항이 똑같이 작동합니다. 이러한 컨트롤러를 테스트하고 조정할 수는 있지만 논리적 상속이있는 동안에는 UI가 구현되는 방식에 계층 구조가 적용되지 않습니다.

컨트롤러와 관련이 없지만 공통된 "글로벌 관심사"가 있거나 "aspect"라고 부르는 경우 서비스 대신 컨트롤러 계층 구조에 대한 걱정 대신 해당 서비스와 상호 작용합니다.

관련 문제