2014-04-16 2 views
0

AngularJS에서 범위 상속에 문제가 있습니다. 문제는 Angularjs inheriting parent scope confusion과 비슷하지만 어떻게 든 대답이 나에게 적용되지 않는 것 같습니다.AngularJS 범위 상속 설명

중첩 된 (내가 사용하는 모든 컨트롤러를 완벽하게 제어 할 수 없도록 일부 외부 구성 요소를 사용하는) 컨트롤러가 있습니다. 가장 바깥 쪽 컨트롤러와 가장 안쪽 컨트롤러는 다음과 같이 나 자신에 의해 정의됩니다.

<div ng-controller="my-outer-controller"> 
    <div ng-controller="not-mycontroller"> 
    <div ng-controller="more-controllers"> 
     <div ng-controller="my-inner-controller"> 
     </div> 
    </div> 
    </div> 
</div> 

function myOuterController(@scope) { 
    @scope.someFunction = function() { 
    } 
} 


function myInnerController(@scope) { 
    // This function does not exist here! 
    @scope.someFunction(); 
} 

someFunction() 함수는 내부 컨트롤러에서 사용할 수 없습니다. 우선 사이에서 격리 된 범위를 만드는 몇 가지 지침이 있어야한다 생각하지만, 내가 좋아하는 뭔가를 할 때 때를 다음 그것을 수행 업무 : 나는에 관해서는 꽤 잘 이해하고 있다고 생각 그냥

@scope.$parent.$parent.someFunction() 

방법 각도 범위는 그들이 나를 땅에 떨어 뜨리는 일을합니다.

왜 이런 일이 발생했는지에 대한 좋은 설명이 있지만 확실하게 볼 수는 없습니다. $ parent를 통해 액세스 할 수있는 모든 속성은 하위 범위에 의해 자동으로 상속 받았다고 생각했습니다.

+0

지시어에 의해 'not-my-controller'가 생성 될 수 있습니까? 그렇다면 다른 방식으로 생성되어 문제가 발생할 수 있습니다. –

+0

Dunno,하지만 문제는 여기에서 작동합니다. http://jsfiddle.net/SNLNQ/61/ –

+0

이 답변을 확인해 보셨습니까? http://stackoverflow.com/a/14049482/2874153? – Erex

답변

0

이 질문은 오래된 질문이지만 다른 사용자가 귀하의 문제에 직면 할 수 있다고 생각했습니다.

컨트롤러에서 별칭 구문을 사용하는 것이 좋습니다.

코드를 단순화하고 수행하려는 작업을 분명히 설명합니다.

별칭 구문은 $ scope를 직접 주입하지 않으므로 어떤 컨트롤러가 사용 중인지 명확하게 알 수 있습니다.

Check this awesome explanation out.

도움이되기를 바랍니다.