6

Devo usare la funzione $q a link della mia direttiva. Ne ho bisogno per racchiudere la possibile promessa che è riaccordata da uno degli argomenti (vedi l'esempio sotto). Non so, tuttavia, come passare la dipendenza da $q a questa funzione.

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

Hai una sintassi piuttosto strana e probabilmente rotta in quella funzione di collegamento, tra l'altro. – Thomas

risposta

13

Basta aggiungerlo come dipendenza dalla direttiva e $ q sarà utilizzabile nella funzione di collegamento. Questo a causa di JavaScript closures.

Di seguito è riportato un esempio basato sul codice.

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

Non si può iniettare la funzione di collegamento diretto, ma si possibile iniettare funzione factory della direttiva:

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

Oppure utilizzare la sintassi array per l'iniezione se si utilizza un minifier.

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