2013-02-13 3 views
2

필자는 같은 기능을 수행 한 후에 동일한 함수를 호출해야하는 몇 가지 지시문이 있습니다. 이 함수는 주 컨트롤러 범위에 액세스해야하지만 DOM도 수정해야합니다. 이 함수를 어디에서 어떻게 선언해야합니까? 이 기능은 컨트롤러의 범위를 액세스 할 필요가있는 경우각도 재사용 가능 함수

+0

주 컨트롤러 범위 아래에있는 모든 지시문이 있습니까? 다시 말해, 주 컨트롤러가 정의 된 요소 (예 :

...
) 내에 이러한 지시문을 구현하는 모든 DOM 요소가 있습니까? – bmleite

+0

@bmleite - 예, 그렇습니다. – supermasher

답변

7

서비스는 $rootScope에 대한 액세스 권한이 있습니다. DOM 수정을 지시문 수준으로 유지하는 것이 더 좋지만 경우에 따라 서비스를 이용할 수 있습니다.

angular.module("myModule", []) 
.factory("MyService", function ($rootScope) { 
    return { 
     myFunction: function() { // do stuff here } 
    } 
}) 
.directive("MyDirective", function (MyService) { 
    return { 
     link: function (scope, iElement, iAttrs) { 
      // try do keep dom modification here, you have access to MyService, 
      // let it do the algorithm and try to keep dom modification here. 
      // PS: you can also inject $rootScope to directives. 
     }; 
    }; 
}); 
+0

+1입니다. 재사용 가능한 함수가 서비스 내에서 어떻게 선언 될 수 있는지를 알면 분명히 액세스 할 필요가있는 지시어로 전달 될 수 있습니다. 고마워요. – supermasher

-1

, 나는 지시에 액세스 할 수있는 범위를 사용하는 것이 그래서 같이 PARAM로 전달 :

var MyDirective = function() { 
    var linkFn = function(scope, element, attrs) { 
     callAwesomeFn(scope); 
    }; 

    return { 
     link: linkFn 
    } 
}; 

지금, 어디에 넣어?

  • 이 유틸리티 함수 인 경우이 각도에 의해 관리되는 다른 객체와 상호 작용하는 데 필요한 구성 요소 인 경우, 나는 MyFunctions.callAwesomeFn()
  • 같은 일부 유틸리티 네임 스페이스에 둘 것 - 의존성 주입을 사용하고 지시
  • 에 주입이
+0

감사합니다 루카스, 범위를 유틸리티 함수로 전달하는 것은 정확히 제가 한 일입니다. 조금 더러워 져서 내 목표를 달성하기 위해 범위 밖의 범위를 지나치고 있다고 느낍니다. 재사용 가능한 함수는 두 개의 다른 함수를 호출합니다. 하나는 DOM을 수정하고, 다른 하나는 컨트롤러 기능을 호출합니다. 두 번째 제안 (DI)이이 목적에 적합한 지 확신 할 수 없습니까? 솔루션 및 예제는 – supermasher