2016-08-02 4 views
1

내 DOM의 일부 요소를 조작하려면 링크 함수를 사용해야하지만 서비스를 사용해야합니다. 컨트롤러 함수에서, 나는 이것을하는 법을 알고 있지만, 링크 함수에서 이것을 달성하는 방법을 모른다.링크 기능에 서비스를 주입하는 방법은 무엇입니까?

--EDIT-- 좀 더 명확 자신을 넣어 보자 : 나는 전단지와 각-하게 시공 사용하고

.

link: function($scope) { 
    $scope.to.marker.on('dragend', function(eventArguments) { 
    var newPosition = eventArguments.target.getLatLng(); 
    $scope.model.geocodes = newPosition; 
    }); 
} 

문제는 내가 이것에 서비스를 주입 할 필요가있다 : 그러나 전단지에있는 이벤트는 다음과 link 기능을 넣어해야합니다. 각도 형식으로 (http://docs.angular-formly.com/docs/formlyconfig) 그것은 controller: function($scope)에 서비스를 삽입 할 수 있다는 것을 보여 주지만, link에서 같은 일을 할 수있는 방법을주지 않고 링크에서 $scope.model.geocodes을 변경하면 해당 서비스가 실행되지 않습니다. 내 custom-template 컨트롤러에 설정 한 watcher.

나는 분명히했다.

+0

이 잘못된 접근이다. 먼저 컨트롤러 내의 모든 데이터를 확인한 다음해야하는 경우 해결 된 값으로 dom 요소를 조작해야합니다. 나는 당신이 $ scope를 사용하고 있다고 가정 할 것이다. ControllerAs 구문을 사용하는 것이 좋습니다. Angular 1.5.x에서는 이상적으로 구성 요소를 사용하고 injectable $ 요소를 사용하고보기에 의존하여 dom의 변경 사항을 처리해야합니다. 많은 접근법이 유효하지만, 단지 내 개인 취향입니다. – zilj

+1

@musefan 나는 "지시어의 링크 기능에 서비스를 사용하는 방법"이라고 이해했다. – zero298

답변

3

난 당신이 지시에 주입하고, 링크 기능으로 캡처 할 수 있습니다 생각 :

function SomeDirective(SomeService){ 
    return{ 
     link:function(){ 
      SomeService.something(); 
     } 
    } 
} 

SomeDirective.$inject = [ 
    "SomeService" 
]; 

angular 
    .module("some-module") 
    .directive("some", SomeDirective);