6

Ich brauche $q eine link Funktion meiner Anweisung. Ich brauche es, um mögliche Versprechen zu verpacken, die durch eines der Argumente neu abgestimmt werden (siehe Beispiel unten). Ich weiß jedoch nicht, wie man eine $q Abhängigkeit an eine dieser Funktion weitergibt.

angular.module('directives') 
.directive('myDirective', function() { 
    return { 
    scope: { 
     onEvent: '&' 
    } 
    // ... 
    link: function($scope, $element) { 
     $scope.handleEvent() { 
     $q.when($scope.onEvent()) { 
      ... 
     } 
     } 
    } 
    } 
} 
+0

Sie haben übrigens ziemlich seltsame und wahrscheinlich gebrochene Syntax in dieser Link-Funktion. – Thomas

Antwort

13

Fügen Sie es einfach als eine Abhängigkeit von Ihrer Anweisung hinzu und das $ q wird in der Link-Funktion verwendbar sein. Dies liegt an JavaScript closures.

Im Folgenden finden Sie ein Beispiel basierend auf Ihrem Code.

angular.module('directives') 
.directive('myDirective', ['$q', function($q) { 
    return { 
    scope: { 
     onEvent: '&' 
    } 
    // ... 
    link: function($scope, $element) { 
     $scope.handleEvent() { 
     $q.when($scope.onEvent()) { 
      ... 
     } 
     } 
    } 
    } 
}]) 
2

Sie können nicht in die Link-Funktion injizieren direkt, aber Sie können injizieren in die Fabrik Funktion der Richtlinie:

angular.module('directives') 
.directive('myDirective', function($q) { 
    ... 

Oder die Array-Syntax zur Injektion verwenden, wenn Sie einen minifier verwenden.

2
var module = angular.module('directives'); 
module.directive('myDirective', ['$q', function($q) { 
... 
}]);