2014-10-07 1 views
0

이것은 잘못 구성된 질문이지만 아직 명확하게 설명 할 수있는 지식이 없습니다. 또한 지저분한 프로젝트를 물려 받았기 때문에 예제 코드를 많이 줄 수는 없습니다. 나는 angular.module('messyApp')에 존재하는 testCtrl 컨트롤러에 $scope.$back 함수를 정의했다. 이것은 별도의 js 페이지 main.js에 있습니다.머리글의 일반 자바 스크립트에서 각도 함수를 호출하십시오.

각도 물건이로드 된 후 onkeydown 이벤트를 트리거하면 헤더의 일반 자바 스크립트 스크립트에서이 함수를 호출하려고합니다. 각도를 호출해야한다는 생각이 들지만 $apply 함수는 이러한 함수에 액세스하는 방법을 알아 내지 못합니다. 정의되지 않은 오류가 발생합니다.

testCtrl 컨트롤러를 설정하려면 $routeProvider을 사용하고 있습니다. 몇 가지 코드가 있습니다.

<html> 
<head> 

    ...loads of scripts and stuff... 

    <script type="text/javascript"> 
     function keyFunc(e) { 

      switch (e.keyCode) { 
       case 37: 
        console.log('left'); 
        break; 
       case 38: 
        console.log('up'); 
        break; 
       case 39: 
        console.log('right'); 
        break; 
       case 40: 
        console.log('down'); 
        break; 
      } 

      $rootScope.$next(); // angular function im trying to trigger 
     } 
    </script> 
</head> 
<body ng-app="messyApp" onkeydown="keyFunc(event)"> 

    ...tons more scripts... 

</body> 
</html> 

각도 기능 $back()은 정말에 오면 그래서, 나는이 트리거링 JS의 해키 솔루션을 받아 들일 수

<a ng-click="$back()"><div class="icon" id="backicon"><img src="back.png" /></div></a> 

를 사용하여 페이지의 다른 하이퍼 링크 트리거 대신에 하이퍼 링크 (각도를 트리거 할 것이라고 생각합니다).

+3

'angle.element ('body')를 수행하는 경우 scope() keyFunc에서'rootScope'를 잡을 것입니다 – Chandermani

+0

좋습니다, $ rootScope에 접근했습니다.하지만 함수를 호출하는 방법을 알아낼 수 없습니까? – myol

+1

먼저 범위에서 함수를 정의해야합니다. 두 번째로 html 요소가 첨부 된 범위인지 알아야합니다. 그런 다음 html 요소를 angular.element 구문을 사용하여 참조하고 범위를 가져 와서 함수를 호출하십시오. $ 다음에 어디에 정의되어 있습니다. 해당 ng 컨트롤러가 정의되어 있으면 해당 요소를 사용하십시오. – Chandermani

답변

2

당신이 $rootScope에 정의 된 함수에 액세스하려는 경우, 당신은 $root.하여 HTML에서 제대로을 참조해야합니다. 예 : <a ng-click="$root.$back()"></a>

그러나 다른 많은 문제가 있습니다. 나는 ui-router와 state-based navigation을 사용하여 여러분의 삶을 훨씬 쉽게 만들어 줄 것을 권할 것입니다. 또한 가능하면 $ rootScope를 사용하지 마십시오. 키에 바인딩하려면 각도 지시문을 사용하는 것이 가장 좋습니다. 예를 들어, Enter 키에 바인딩하려는 경우 코드는 지시문의 링크 함수에서 다음과 같이 보입니다.

element.bind("keydown keypress", function (event) { 
     if(event.which === 13) { 
     doSomething(); 
     } 
}      
1

가장 좋은 방법은 다음과 같이 뭔가를 추가하는 것입니다 :

<body ng-app="messyApp" ng-keydown="$next()"> 
+0

나는 원래 이와 비슷한 것을 시도했지만 각진 물건은 아무 것도 방아쇠를 당기지 않는 것으로 보입니다. 그래서 나는 키 누름을 듣기 위해 일반 자바 스크립트로 바꿨습니다. – myol

관련 문제