2016-08-02 12 views
1

DOMのいくつかの要素を操作するにはリンク関数を使用する必要がありますが、そのためにはサービスを使用する必要があります。コントローラー関数では、これを行う方法はわかっていますが、リンク関数ではこれを達成する方法がわかりません。サービスをリンク機能に挿入するにはどうすればよいですか?

--EDIT-- 私はより明確に自分自身を入れてみましょう:私はリーフレットと角度-formly使用しています

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では、理想的にはコンポーネントを使用し、注入可能な$要素を使用し、ビューに依存してdomの変更を処理する必要があります。しかし、多くのアプローチが有効ですが、私の個人的な好みです。 – zilj

+1

@musefan私はそれを「ディレクティブのリンク機能でどのようにサービスを使うのか」と理解しました。 – zero298

答えて

3

私はあなたがディレクティブに注入し、リンク機能にそれをキャプチャすることができると信じて:

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

SomeDirective.$inject = [ 
    "SomeService" 
]; 

angular 
    .module("some-module") 
    .directive("some", SomeDirective); 
関連する問題