2013-04-16 6 views
3

HTML 요소를 향상시키는 지시문을 만들려고합니다. 그래서 실행하고 나의 현재 코드는 다음과 같은 것입니다 요소와 연관되는 지침을 얻을 수 있었다 : 이제Angular 지시어에 메서드를 추가 하시겠습니까?

angular.module('myModule', []) 

    .directive('myDirective', function() { 
     return { 
      restrict: 'C', 
      replace: false, 
      scope: {}, 
      link: function(scope, element, attrs) { 

      } 
     } 
    }); 

내가 예를 들어 내가 싶습니다, HTML 요소에 새로운 방법을 추가하고 싶습니다 이것을하십시오 :

// Pseudo code 
myElement.reset(); 
myElement.reload(); // etc. 

지시어에이 방법을 추가하는 가장 좋은 방법은 무엇입니까?

+1

정말로 원하는 것을 분명하지 않지만 HTML 요소의 기능을 각도로 표시하지 마십시오. 함수를 정의 할 수있는 자연스러운 곳은 지시문 컨트롤러에있을 수 있습니다. 지시어 $ scope 또는 컨트롤러 자체를 통해 노출시킬 수 있습니다.이 작업은 실제로 원하는 작업에 따라 달라집니다. – joakimbl

+0

다소 많지 않은 질문이 내 http://stackoverflow.com/questions/34682739/initialising-and-re-initialising-a-component-in-angularjs. 나는 여전히 만족스러운 대답을 찾고있다. Artem의 대답이 "Angular way"라면, Angular 방식은 아주 좋은 방법은 아닙니다. – poshest

답변

4

요소에 새 메서드를 추가하는 것은 각도 방법이 아닙니다. 각도 방법은 필드가있는 객체를 생성하여 지시문에 전달하고 지시문 내부의 필드 변경을 감시합니다. 다음은 간단한 예입니다. http://plnkr.co/edit/5v5mN69Bu18jpnoGwYqj?p=preview

1

귀하의 지시문 예는 매우 기본적인 것이므로 달성하고자하는 것이 무엇인지 알 수 없습니다. 적어도 다음과 같이 말할 수 있습니다. 새로운 기능을 범위의 기능으로 정의 할 수 있습니다 (예 :

범위에서로드 된 데이터 (예 : function reload()에서 사용하기 위해)에 액세스하려면이 컨트롤러를 사용해야합니다. 따라서 서비스를 데이터 소스로 삽입 할 수 있습니다. 요소에 직접 바인딩 된 함수를 구현하는 것이 jQuery에서 angularjs를 사용하지 않는 방법입니다. angularjs에서는 주로 범위로 작업합니다.

아마도 jsfiddle 또는 plnkr을 사용하여 가장 완벽한 예제를 제공 할 수 있습니다. 사용 사례 나 문제를 작동 코드로 보는 것이 더 쉽습니다.

+2

나는 그것을 얻지 않는다; 이 답변에 따르면 : http://stackoverflow.com/a/15681173/1641941 귀하의 지시어에 속하는 함수로 범위를 오염시키는 것은 좋지 않지만, 나는 어디에서 그들을 추가 할 것인지 그리고 어떻게 호출해야하는지 알 필요가 없습니다. 이 답변과 다른 답변은 Google 검색에서 나타 났지만 내 질문에는 대답하지 않습니다. – HMR

+0

@HMR 당신이'scope : {}'을 가지고 있기 때문에 범위를 오염시키는 것에 대해 걱정할 필요가 없습니다. 지시어는 고립 된 범위를 가지고 있습니다. 링크 또는 컨트롤러의 범위에 함수를 추가 할 수 있습니다. –

관련 문제