6

Tôi cần sử dụng chức năng $q a link của chỉ thị của mình. Tôi cần nó để bọc lời hứa có thể được retuned bởi một trong những đối số (xem ví dụ dưới đây). Tuy nhiên, tôi không biết, làm thế nào để vượt qua sự phụ thuộc $q vào một chức năng này.

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

Bạn có một số cú pháp khá kỳ lạ và có thể bị hỏng trong hàm liên kết đó, nhân tiện. – Thomas

Trả lời

13

Chỉ thêm nó làm phụ thuộc vào chỉ thị của bạn và $ q sẽ có thể sử dụng được trong hàm liên kết. Điều này là do JavaScript của closures.

Dưới đây là ví dụ dựa trên mã của bạn.

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

Bạn không thể tiêm vào các chức năng liên kết trực tiếp, nhưng bạn thể tiêm vào chức năng nhà máy của chỉ thị:

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

Hoặc sử dụng cú pháp mảng để tiêm nếu bạn sử dụng một minifier.

2
var module = angular.module('directives'); 
module.directive('myDirective', ['$q', function($q) { 
... 
}]); 
Các vấn đề liên quan