2014-06-20 3 views

답변

4

끔찍한 사례이지만, angular.element을 사용하고 대상 컨트롤러 내에있는 요소에서 scope을 얻을 수 있습니다.

예 :

<div ng-controller="myApp"> 
    <span id="test"></span> 
</div> 

자바 스크립트 :

var scope = angular.element("#test").scope(); 
scope.doSomething(); 

귀하의 scope 변수가 이제 myApp 컨트롤러에 정의 된 모든 메소드에 액세스 할 수 있습니다.

+1

이것이 끔찍한 일이라면 서버의 기본값으로 채워진 입력 요소를 어떻게 처리해야할까요? – Lawyerson

+0

@BauceLawyerson - 입력 된'value' 속성을 채우지 말고 Angular를 통해 서버 값을 파싱하고 올바른'ngModel' 변수에 할당하십시오. – tymeJV

+0

이것은 디버그 모드에서만 작동합니다. angle.element ("# id"). 해제 모드에서는 scope()를 사용할 수 없습니다. "DOM에서 범위 가져 오기"절을 참조하십시오. [link] (https://docs.angularjs.org/guide/scope) – Cesar

43

질문은 코드를 실행하는 방법이 아니라 변경 이벤트를 트리거하는 방법입니다. 나는 이것을하기에 각도 친화적 인 방법을 발견했다. 나는 그것을 변경 한 다른 입력 값을 변경하는 jQuery UI 슬라이더가 있습니다. 그 비밀은 angle.element로 바꾸면 이제 triggerHandler라는 메서드에 액세스 할 수 있다는 것입니다. 내가 본 바로는,이 사용하는 나쁜 관행으로 간주되지 않을 것이다 :

angular.element(document.getElementById('test')).triggerHandler('change'); 

tymeJV의 대답은 직접 jQuery를 사용하지 않고 angular.element("#test")을했다,하지만 난 콘솔 오류 및 방법 깨진 기능을 얻었다. 이 버전은 종속성없이 작동합니다.

+0

정확하게 이것은 jQuery'.trigger ('change')가 작동하지 않을 때 필요한 것입니다. 감사! – pappy

+0

이것은 정확히 내가 찾고 있었던 것입니다. 이렇게하면 javascript를 통해 요소에 대한 변경 방법을 실용적인 방식으로 실행할 수 있습니다. 입력을 처리하는 사용자 지정 지시문이 있고 입력 값이 변경 될 때 변경 기능을 트리거해야하는 경우 매우 유용합니다. – Xenology

관련 문제