2015-04-11 22 views
6

Tôi có một chỉ thị được viết bởi nhà phát triển khác mà về cơ bản đã theo cấu hình:luận 4 đến liên kết chức năng

{ 
    controller: MyController, 
    controllerAs: 'myController', 
    link: function(scope, $element, attrs, ctrl) { 
     // Does some setup that requires controller 
    } 
} 

này hoạt động tốt, điều khiển được thông qua như là đối số thứ tư, các công trình chỉ thị.

Bây giờ tôi đã quyết định làm cho chỉ thị linh hoạt hơn, có thể tái sử dụng và công cụ. Vì vậy, để chỉ thị cấu hình tôi đã thêm

require: '?ngModel' 

Đột nhiên, bây giờ bộ điều khiển của tôi không bao giờ được chuyển đến chức năng liên kết. Không có mảng cho đối số thứ tư, không có đối số thứ năm, nada.

Tôi đã thử thêm bộ điều khiển vào chỉ thị require - nhưng nó vẫn không tìm thấy.

Làm cách nào để thêm require và vượt qua bộ điều khiển?

Trả lời

8

require có nghĩa là chỉ thị bạn yêu cầu (ngModelController trong trường hợp này) sẽ có bộ điều khiển được gửi làm đối số thứ tư của hàm liên kết. Bộ điều khiển mặc định là chỉ thị, có chức năng liên kết được gọi, bộ điều khiển nhưng yêu cầu một chỉ thị khác ghi đè nó (ngay cả khi đó là yêu cầu tùy chọn và chỉ thị bắt buộc không có, trong trường hợp đối số thứ tư sẽ là undefined). May mắn thay, require có thể là một mảng của các chỉ thị, vì vậy đây sẽ làm việc:

module.directive('myDirective', function() { 
    return { 
     controller: MyController, 
     controllerAs: 'myController', 
     require: ['myDirective', '?ngModel'], 
     link: function(scope, $element, attrs, controllers) { 
      var MyDirectiveController = controllers[0]; //this directive's controller 
      var ngModelController = controllers[1]; 
     } 
    }; 
}); 

PLUNKER

+0

này làm các trick. Cảm ơn! – Eugene

Các vấn đề liên quan