CoffeeScript - 각도 식에서 DOM 노드를 참조할 수 없습니다.
저의 주요 질문은 간단합니다.
컨트롤러 또는 Directives에서 DOM 조작을 하면 오류가 발생하지만 기능은 완벽하게 작동합니다.
Error: [$parse:isecdom] Referencing DOM nodes in Angular expressions is disallowed! Expression: open()
이러한 에러는 무시하고, 기능적인 관점(디자인적인 관점)에서 안전하다는 확인을 받고 싶습니다.
심플하게 하기 위해서, 이 질문에 대해서, 저의 필요성을 묻지 않고 간단하게 대답해 주시면 감사하겠습니다.
자세한 내용은 https://gist.github.com/kosz/04f916a5725d85045be5 (의존관계: angular, jquery, jquery ui dialog)와 현재 이 동작을 겪고 있는 코드를 참조해 주세요.
저는 지금까지 이 오류를 없애기 위해 최선을 다했고, 제가 읽은 내용과 문서를 바탕으로 각도로 돔 조작을 하도록 지시하는 것 같습니다.
그래서 나는 명령어로 코드를 작동시켰지만, 여전히 에러를 발생시킨다!?
보시는 것처럼 사용자가 편집을 원할 경우 Jquery UI를 사용하여 목록 항목별로 표시합니다.돔을 직접 조작하는 것은 아니지만, jQuery ui Dialog의 닫힘/열림 이벤트를 제어하는 방법이 필요합니다.이로 인해 Angular가 콘솔을 오류로 가득 채우지 않습니다.
이에 대한 어떠한 통찰도 대단히 감사합니다.
angular ui bootstrap modal은 알고 있기 때문에 이 시나리오에서는 사용할 수 없습니다.
에러가 나타내는 바와 같이, Angular는 식에서 DOM 노드에의 액세스를 금지합니다.
인 CoffeeScript를 합니다.return를 지정합니다.
은 예를 , '아까보다'가 '아까짓게 됩니다.scope.open뭇매를 맞다
return element.dialog('open');
각도가 이를 감지하고 오류를 발생시킵니다.
인 " " " 를 할 return문제를 해결할 수 있습니다.
scope.open = =>
element.dialog('open')
return true
인정된 답변은 맞지만, 어쨌든 다른 문제였으므로 제 경험을 공유하고 싶습니다.사실 저도 같은 문제가 있었습니다만, 실제로 제 기능(Coffee Script도 사용하지 않음)에서 아무것도 반환하지 않았기 때문에, 조금 당황하고 해결책을 찾기가 어려웠습니다.
이 경우 다음과 같은 함수의 인수로 DOM 노드를 전달하고 있는 것이 문제인 것 같습니다.
<span ng-mouseenter="doSomething($event.currentTarget)"></span>
여기서 해결책으로 판명된 것은 언급한 코드를 변경해서 이벤트만 통과시키고 노드는 직접 통과시키지 않는 것이었습니다.
<span ng-mouseenter="doSomething($event)"></span>
다음으로 controller/direction/direction으로 노드를 가져옵니다.
doSomething = function(evt){
var elem = evt.currentTarget;
// do something with this element...
};
식이 DOM 노드에 액세스를 시도할 때 발생합니다.
AngularJS는 임의의 Javascript 코드를 실행하는 알려진 방법이기 때문에 식 내에서 DOM 노드에 대한 액세스를 제한합니다.
이 검사는 Angular 식에서 개체 인덱스 및 함수 호출에 대해서만 수행됩니다.개발자가 지키기가 더 어려운 곳들이다.닷이 있는 멤버의 액세스(a.b.c 등)에서는 이 체크가 실행되지 않습니다.이러한 민감하고 강력한 오브젝트를 스코프 체인상에 직접 공개하지 않는 것은 개발자의 책임입니다.
이 오류를 해결하려면 DOM 노드에 대한 액세스를 피하십시오.
그$parse:isecdom또한 이벤트 핸들러가 DOM 노드를 반환하는 함수를 호출한 경우에도 오류가 발생합니다.
<button ng-click="iWillReturnDOM()">click me</button>
js:
$scope.iWillReturnDOM = function() {
return someDomNode;
}
이 문제를 해결하려면 이벤트 핸들러에서 DOM 노드를 반환하지 마십시오.
주의: 이 에러는 컨트롤러에서 DOM 에 액세스 하고 있는 것을 의미합니다.이것은, 통상, 문제의 분리를 위반하는 불량한 코딩 스타일의 표시입니다.
CoffeeScript에서의 암묵적인 반환
이 오류는 암묵적 반환이라는 기능이 있는 CoffeeScript를 사용할 때 더 자주 발생할 수 있습니다.이 언어 기능은 함수에 명시적인 return 문이 없을 때 함수에서 마지막으로 참조된 개체를 반환합니다.
이 시나리오의 해결책은 명시적인 반환문을 추가하는 것입니다.위해서example return함수에 위배됩니다.
오류: $parse: isecdom Expression에서 DOM 노드를 참조하고 있습니다.
언급URL : https://stackoverflow.com/questions/23838497/coffeescript-referencing-dom-nodes-in-angular-expressions-is-disallowed
'programing' 카테고리의 다른 글
| 각도 재료 설계 - 화면 크기에 따라 플렉스 값 변경 (0) | 2023.03.23 |
|---|---|
| jQuery/JavaScript를 사용하여 JSON 데이터를 해석하는 방법 (0) | 2023.03.23 |
| 스프링 부트에서의 json 날짜 형식 (0) | 2023.03.23 |
| 워드프레스:서버에서 로컬 호스트로 다중 사이트 이동 (0) | 2023.03.18 |
| ng각 2에서 작동하지 않는 텍스트 영역 모델 (0) | 2023.03.18 |