6

Мне нужно использовать $q a link Функция моей директивы. Мне нужно это, чтобы обернуть возможное обещание, которое перенастроено одним из аргументов (см. Пример ниже). Однако я не знаю, как передать $q зависимости от этой функции.

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

У вас есть довольно странный и, вероятно, сломанный синтаксис в этой функции связи, между прочим. – Thomas

ответ

13

Просто добавьте его как зависимость от вашей директивы, а $ q будет использоваться в функции ссылок. Это из-за JavaScript closures.

Ниже приведен пример, основанный на вашем коде.

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

Вы не можете ввести в функцию связи напрямую, но вы можете впрыснуть в функции ФАБРИКА директивы:

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

Или использовать синтаксис массива для инъекций, если вы используете Minifier.

2
var module = angular.module('directives'); 
module.directive('myDirective', ['$q', function($q) { 
... 
}]); 
Смежные вопросы