사용자 지정 지시문을 만들고 jQuery와 독립적으로 만들려고합니다. 이를 jQuery없이 수행하려면 Scopes (부모 및 자식)가 직접 상호 작용해야 할 수 있습니다. 가능한 한 많은 "나쁜 습관"을 피하고자합니다. 제 질문은 다음과 같습니다.Angular에서
상위 범위의 함수를 하위 범위로 직접 호출하는 것은 나쁜 습관입니까? 그렇다면 스코프를 제어하는 컨트롤러 나 요소를 얻는 방법이 있습니까?
이렇게해야하는 이유는 지시어에 여러 중첩 스코프가있을 수 있기 때문입니다. 그리고 반드시 현재 범위의 직계 부모가 아닌 매우 특정한 하나에 액세스해야합니다 (조상이지만).
편집 : 유스 케이스 정교화
이 모듈은 두 개의 지침이 포함되어 있습니다. 둘 중 하나는 여러 개의 상위 디렉티브에 중첩 될 수 있습니다. 이 자식 지시문은 그에 따라 부모 지시문을 필요로하지만 중첩 부모의 경우 가장 가까운 부모의 제어기 만 가져옵니다.
이의 정상적인 사용은 일반적으로 될 것입니다 :
<element parent-attr-dir="val">
<element child-attr-dir="val"></element>
</element>
공지 사항 속성의 값과 일치해야합니다. 이것은 어떤 "조상"을 붙일지를 결정합니다.
<element parent-attr-dir="value1">
<element parent-attr-dir="value2">
<element child-attr-dir="value1">Will run on top most ancestor</element>
<element child-attr-dir="value2">Will run on immediate parent</element>
</element>
<element parent-attr-dir="value3">
<element child-attr-dir="value3">Will run on immediate parent</element>
<element child-attr-dir="value1">Will run on top most ancestor</element>
</element>
<element child-attr-dir="val">Will not run!!</element>
</element>
편집 : 질문
이 작품의 솔루션,하지만 나쁜 경우 알 필요가
고급 사용법과 유사 할 수 있습니다.
var _p = scope;
while (_p !== null) {
if (_p.doSomething
&& /* some other criteria. */) {
_p.doSomething(scope);
}
_p = _p.$parent;
}
편집 : 솔루션
jQuery를 사용이 작동하지만, jQLite 부모 (선택)를 가지고 있지 않기 때문에 jQuery를 요구, 단지 부모().
$(element).parents('[attrname=value]').controller('moduleName').funcName()
이것도 충분하지 않습니다. 왜 부모님을 가끔씩 건너 뛰어야하는지 설명했습니다. 나는 이미 해결책을 제안했다. 문제는 그 해결책이 나쁜 습관을 고려한 것인지 아닌지입니다. –
귀하의 솔루션이 매우 편리하다는 것을 이해하십시오. 나는 그것을 존중하고이를 활용할 수도 있습니다 ... 그러나 올바른 대답으로 간주되기 위해서는 제 질문에 올바르게 답해야합니다. –