2013-04-08 3 views
26

In:Sind die Parameter der Link-Funktion einer Direktive auf DI angewiesen?

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

Haben die scope, element und attrs Parameter der Link-Funktion verlassen sich auf Namens gefolgert Dependency-Injection? Wenn ja, wie kann ich sie als Verifizierungsnachweis erstellen?

Oder verlassen sie sich auf gute alte Argumente, um zu ordnen, was in ihnen passiert ist?

Antwort

42

Nein, die Link-Funktion hat einen vordefinierten Parametersatz.

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

Sie sind

  1. Umfang des Elements
  2. Das Element selbst (jquery/mini jquery verpackt)
  3. Attributsatz des Elements
  4. Jegliche in required verwendeten Controller
+1

Was ist mit Minification? '['$ scope', '$ element', '$ attrs', Funktion ($ scope, $ element, $ attrs) {...}' – Clev3r

+11

Die Link-Funktion erfordert nicht die Minimierung Array-Syntax. –

+0

Können Sie uns mehr über den Controller-Teil erzählen? Ist es ein Objekt mit einem Wert für jeden Controller? – heneryville

21

Wenn Sie wollen o verwenden DI mit einer Richtlinie (wie ich), legen Sie die Argumente in der Richtlinie Factory-Funktion anstelle der Link-Funktion injiziert werden:

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

für minification zu ermöglichen, in einer Reihe, wie Sie die Funktion Argument setzen tun für Controller:

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

Siehe aktuelle Zeit Beispiel in the docs.

Edit: See here für eine Demo, die den $timeout Dienst injiziert. Sie können dasselbe tun, wenn Sie eine Anweisung (z. B. return {restrict: 'E', link: function() {...}}) anstelle einer Funktion zurückgeben.