2015-01-24 2 views
0

지시문 container 안에 지시문 foo이 있습니다. DOM을 계층 구조는 다음과 같습니다템플릿에서 필요한 컨트롤러의 속성에 액세스하십시오.

<container> 
    <foo></foo> 
</container> 

link 기능에서 액세스하기 위해 내 foorequire: '^container'를 사용할 수 있습니다. 그러나 종종 템플릿 내에서 해당 컨트롤러에 액세스하려고하므로 내 link 함수의 범위에서 컨트롤러를 설정해야하며 꽤 반복적입니다. 이 작업을 수행하는 더 좋은 방법이 있습니까?

편집 : 분명히 너무 막연했습니다. 이 같은 템플릿으로

mod.directive('container', function() { 
    return { 
    controller: function() { 
     this.interesting = "foo"; 
    } 
    }; 
}); 
mod.directive('foo', function() { 
    return { 
    require: '^container', 
    scope: {}, 
    link: function(scope, element, attrs, ct) { 
     scope.ct = ct; // this is the annoying line 
    } 
    }; 
}); 

: 예를 들면 다음과 같습니다의 세계의 끝이없는에서

{{ ct.interesting }} 

은 분명히 그 라인을 가지고 있지만, 제가 뭔가를하고 있어요 생각한다 잘못된. 더 좋은 디자인이 있습니까?

+0

정확하게 반복되는 것은 무엇입니까? 불필요하다고 생각하는 예를 들어 줄 수 있습니까? –

+0

당신이 무슨 말을하고 있는지 전혀 모르겠습니다. '링크 된 범위의 컨트롤러 설정 '은 무엇을 의미합니까? – charlietfl

+0

질문에 예제를 추가했습니다. – jmgrosen

답변

0

각도 1.2에 추가 된 기능인 컨트롤러는 다음과 같습니다.

mod.directive('container', function() { 
    return { 
    controller: function() { 
     this.interesting = "foo"; 
    }, 
    controllerAs: "ct" 
    }; 
}); 
+0

나는 그것을 시도했지만 작동하지 않았다. 아마도 내가 질문에 언급하지 않은 고립 된 범위 때문일 것이다. (미안하다. 모든 것을 * 사용한다. 명시 적으로 말하기를). – jmgrosen

+0

예, 격리가 문제입니다. 범위 분리는 해당 지시어 외부에서 액세스 할 수 없으며 DOM에서 해당 요소에 대해 부모 범위를 사용할 수 있음을 의미합니다. 숨겨진 상태로 유지하고 액세스 할 수 없도록하려는 범위에 내부 값을 저장하지 않으면 격리 된 범위를 사용하지 않아도되므로 필요하지 않으므로보다 쉽게 ​​작업 할 수 있습니다. 범위 사본을 만들고 새 값을 추가하려면 대신 'scope : true'를 사용하는 것이 좋습니다. – Enzey

관련 문제