2013-06-08 3 views
9

지시문 안에 개인 함수를 만들 수 있습니까? 지시어 템플릿을 채우기 위해 지시문 내에서 다소 복잡한 프로세스를 수행해야합니다. 이 (HTML) 같은지시문 내 개인 함수 만들기

뭔가 :

<textarea the-result="data"> 
</textarea> 

자바 스크립트 :

angular 
.module("MyModule") 
.directive("theResult", [function() { 
    return { 
     scope: { 
      theResult: "=" 
      // calculatestuff = function(d){ // ... } can't put it here (error) 
     }, 
     template: ' ... ' 
      + '{{calculatestuff(theResult.someproperties)}}' 
      + ' ... ' 
    } 
}]) 

내가 calculatestuff를 넣을 수 있습니다?

답변

13

directive(directiveName, directiveFunction)directiveFunction이 반환하는 것을 사용합니다. 당신은이 함수 내에서 당신이 원하는 무엇이든 할 수 있습니다, 같은 예를 들어, 다른 함수를 정의 :

angular 
.module("MyModule") 
.directive("theResult", [function() { 
    var calculateStuff = function (d) { 
     // ... 
    }; 

    return { 
     // ... 
    } 
}]); 

그러나 당신을 물론, calculateStuff$digest 사이클 동안 더 이상 존재하지 않으며 범위에 링크되지 않으므로 템플릿 내에서 호출 할 수 없습니다. 이것은 당신이 원하는 무엇을 정말 인 경우, 연결 단계에서, 범위에 기능을 넣어 명상 : 당신이 고립 된 범위를 사용하기 때문에

angular 
.module("MyModule") 
.directive("theResult", [function() { 
    return { 
     scope: { 
      theResult: "=" 
     }, 
     template: ' ... ' 
      + '{{calculatestuff(theResult.someproperties)}}' 
      + ' ... ', 
     link : function ($scope) { 
      $scope.calculateStuff = function (d) { 
       // ... 
      }; 
     } 
    } 
}]); 

는,이 기능은 지침 외부에서 accesible되지 않습니다.

+0

브라우저에서 최종 결과가 비어 있습니다. ( –

+0

맞아요, 조금 피곤하네요. 내 대답을 편집했습니다 :). – Blackhole

+0

함수를 링크 내의 범위로 이동 한 후 작동합니다. 감사! –