web-dev-qa-db-ja.com

ディレクティブのリンク関数のパラメーターはDIに依存していますか?

に:

module.directive 'name', ->
  (scope, element, attr) ->
    # Whatever implemenation

リンク関数のscopeelement、およびattrsパラメーターは、名前から推測される依存性注入に依存していますか?はいの場合、どうすればそれらを縮小証明にすることができますか?

それとも、渡されたものについて古き良き議論の順序に依存していますか?

26
ejoubaud

いいえ、リンク関数には事前定義されたパラメータのセットがあります。

function link($scope, $element, attrs, ctrl) {
    //Your method
}

彼らです

  1. 要素の範囲
  2. 要素自体(jquery/mini jqueryラップ)
  3. 要素の属性セット
  4. requiredで使用されるコントローラー
44
Arun P Johny

(私が行ったように)ディレクティブでDIを使用する場合は、リンク関数の代わりにディレクティブファクトリ関数に挿入する引数を配置します。

_module.directive('name', function($timeout) {
    return function(scope, element, attrs) {
        ...
    };
});
_

縮小を可能にするには、コントローラーの場合と同じように、関数の引数を配列に配置します。

_module.directive('name', ['$timeout', function($timeout) {
    return function(scope, element, attrs) {
        ...
    };
}]);
_

ドキュメントcurrent timeの例を参照してください。

編集: ここを参照 _$timeout_サービスを注入するデモの場合。関数の代わりにディレクティブ(例:return {restrict: 'E', link: function() {...}})オブジェクトを返す場合も同じことができます。

22
z0r