2013-01-15 5 views
2

동반 plunker.AngularJS - 인과 관계가없는 중첩 지시문?

div에 특성 수준 사용자 지정 지시문이 있습니다. 이 지시문에는 격리 된 범위가 있습니다. 내 div 안에는 부모의 범위에있을 것으로 기대되는 다른 지시문이 있습니다.

내 div의 지시문은 부모 범위이 아닌 격리 된 범위에만 액세스 할 수 있습니다. 나는 그 이유를 이해하지만, 그것을 깔끔하게 해결하는 방법에 대해서는 분명하지 않다.

나는이 문제를 해결하기 위해 transclude를 사용할 수 있다는 것을 알고 있지만 (plunker 참조), 이것은 매우 조잡한 느낌입니다. 나는 템플릿이 필요 없지만, transclude를 작동시키기 위해서 하나 만들어야 만하고, transclude는 중첩 된 지시어가 올바른 범위에 액세스 할 수있는 유일한 방법 인 것 같습니다.

대체 방법이 있습니까?

  • 내가이기 때문에 나는 고립 된 범위를 사용하고
  • IE
  • 을위한 일을 더 쉽게 만드는 대신 요소 수준의 속성 수준의 지침을 사용하고 있습니다 :

    은 몇 가지 가능한 질문을 머리에 모범 사례 - 우연히 부모 위치에 호스를 설치하고 싶지 않으며 지시문을 이식 가능하도록하고 싶습니다.

답변

2

나는 정말로 당신이 무엇인지 잘 모르겠다. 시도는입니다.

하지만 실제로하고있는 것은 부작용으로 고립 된 범위에서 양방향 바인딩을 이용하는 것입니다. 거의 귀하의 질문과 관련이없는 것처럼 보입니다. 어쨌든

...

here is an update to your plunker 기본적으로 당신이이 경우 toggleOn()에, 당신의 범위 선언에 할당 한 어떤 이름을 사용할 필요가 무엇을 무슨 일이 벌어지고 당신의 격리 지침의 내부입니다.

그러나 원하는 경우 can do this. 기본적으로 $parent.colorToggle()으로 전화하십시오.

+0

감사합니다. 두 솔루션 모두 작동하지만 ng-click은 격리 된 범위에 있다는 것을 알아야하기 때문에 이상적이지 않습니다. 실제로 부모에 있다고 가정 할 수 있어야합니다. 내가 찾고있는 솔루션 (존재한다면!)은 내 div 안의 모든 것이 부모 범위에 있어야합니다. –

+1

@Roy, 동의하지 않습니다 ... ng-repeat, ng-view, ng-include 등에서 자녀 범위에 있음을 알아야합니다. 마찬가지로, 사용자 지정 지시문을 사용할 때 어떤 종류의 범위 (부모, 자식, 격리)인지 알아야한다고 생각합니다. 각진 docs는 기본 제공 지시문에서 자식 범위를 만드는 것을 나타냅니다. 마찬가지로, 우리의 커스텀 디렉티브는 그들이 어떤 종류의 스코프를 생성 하는지를 문서화 할 필요가 있다고 생각한다. –

2

이 transcluding보다 "덜 실수"인 경우가 결정할 수 있습니다 :

<button ng-click="$parent.colorToggle()">Inside</button> 

분리 범위는 $parent 속성을 통해 부모 범위에 액세스 할 수 있습니다. 격리 된 범위는 부모 범위에서 프로토 타입을 상속받지 않지만 Angular는 $ parent 및 $$ childHead 및 $$ childTail을 통해 계층 구조를 유지합니다.

+0

@ blesh가 몇 초에 나를 이길 –

+0

하하 .. 8 초! 내가 이겼다!: P (나는 그의 질문이 대답 될 때까지 물론 아이다.) –

+0

충분히 공정한. .. 나는 내가 다음에 그것을 게시하기 전에 아마 나의 대답을 읽지 않을 것이다. –