2013-04-08 13 views
26

Trong:Các tham số của hàm liên kết của chỉ thị có phụ thuộc vào DI không?

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

Do các thông số scope, elementattrs của hàm liên kết dựa vào tên suy ra phụ thuộc-Injection? Nếu có, làm thế nào tôi có thể làm cho họ bằng chứng minification?

Hay họ dựa vào thứ tự đối số cũ tốt cho những gì được truyền vào chúng?

Trả lời

42

Không, hàm liên kết có một bộ thông số được xác định trước.

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

Họ là

  1. Phạm vi của phần tử
  2. Yếu tố tự (jquery/mini jquery bọc)
  3. Thuộc tính tập hợp các phần tử
  4. Bất kỳ bộ điều khiển sử dụng trong required
+1

Còn về việc rút gọn? '['$ scope', '$ element', '$ attrs', hàm ($ scope, $ element, $ attrs) {...}' – Clev3r

+11

Hàm liên kết không yêu cầu cú pháp mảng minification. –

+0

Bạn có thể cho chúng tôi biết thêm về bộ phận điều khiển không? Nó là một đối tượng với một giá trị cho mỗi bộ điều khiển? – heneryville

21

Nếu bạn muốn t o sử dụng DI với một chỉ thị (như tôi đã làm), đưa các đối số được tiêm trong hàm nhà máy chỉ thị thay vì chức năng liên kết:

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

Để cho phép cho việc rút gọn, đặt tham số chức năng trong một mảng như bạn làm cho bộ điều khiển:

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

Xem thời điểm hiện tại dụ trong the docs.

Chỉnh sửa: See here cho bản trình diễn tiêm dịch vụ $timeout. Bạn có thể làm điều tương tự khi trả về một chỉ thị (ví dụ: return {restrict: 'E', link: function() {...}}) đối tượng thay vì một hàm.