2013-03-08 25 views
18

Trong tài liệu này: http://docs.angularjs.org/guide/directive, nó nói chỉ thị có thể giao tiếp với nhau bằng bộ điều khiển.Các chỉ thị giao tiếp bằng bộ điều khiển như thế nào?

điều khiển - Chức năng của trình xây dựng bộ điều khiển. Bộ điều khiển được khởi tạo trước giai đoạn tiền liên kết và nó được chia sẻ với các chỉ thị khác nếu chúng yêu cầu nó theo tên (xem yêu cầu thuộc tính). Điều này cho phép các chỉ thị giao tiếp với nhau và tăng cường hành vi của nhau.

Tôi không hiểu rõ, cách họ liên lạc với bộ điều khiển? Có bất kỳ ví dụ hoặc demo cho nó?

+2

Kiểm tra [câu hỏi này] (http: // stackoverflow. com/questions/14915332/what-does-require-of-directive-definition-object-take) và [ví dụ này] (http://jsfiddle.net/bmleite/GSZkJ/). – bmleite

+1

Theo kịp các câu hỏi hay. – Stewie

+1

[ví dụ] (http://jsfiddle.net/bmleite/GSZkJ/) là một chút gây hiểu nhầm. ở cái nhìn đầu tiên nó xuất hiện để được chia sẻ các trường hợp điều khiển '' num 'tài sản. khi điều duy nhất thực sự xảy ra là chỉ thị bên trong là sao chép hàm gia tăng từ thể hiện điều khiển chỉ thị bên ngoài đến đối tượng phạm vi mà cả bên trong và bên ngoài chia sẻ. khi nó được gọi từ mẫu này, hãy == đối tượng phạm vi. xem [ví dụ tinh chỉnh] này (http://jsfiddle.net/fess/a68Ra/) để minh họa các điểm đó. –

Trả lời

34

Có lẽ bạn đang bối rối một bộ điều khiển được tạo khi thay đổi tuyến đường xảy ra với bộ điều khiển chỉ thị. Phần đó chỉ nói về các bộ điều khiển chỉ thị, vì vậy phần đó có nghĩa là nếu bạn có hai chỉ thị trên cùng một phần tử HTML, chúng có thể giao tiếp bằng cách yêu cầu các bộ điều khiển khác.

Một ví dụ điển hình là nếu bạn tạo chỉ thị cần liên lạc với ng-model. Kể từ ng-model cho thấy một bộ điều khiển, bạn có thể yêu cầu nó như thế này:

myApp.directive('myDirective', function() { 
    return { 
     require: 'ngModel', 
     link: function($scope, elem, attrs, ngModelCtrl) { 
      // Here you can listen to different DOM events, and 
      // call ngModelCtrl when the model value needs to update 
     } 
    } 
}); 

Và HTML:

<input type="text" ng-model="myModel" my-directive> 

chỉ thị của bạn có thể tiếp xúc với một bộ điều khiển bằng cách thực hiện nó trong đối tượng mà bạn trở về chức năng chỉ thị, như này:

myApp.directive('myDirective1', function() { 
    return { 
     link: function($scope, elem, attrs) { 

     }, 
     controller: function() { 
      this.sayHello = function() { 
       alert("hello!"); 
      } 
     } 
    } 
}); 

myApp.directive('myDirective2', function() { 
    return { 
     require: 'myDirective1', 
     link: function($scope, elem, attrs, myDirective1Ctrl) { 
      myDirective1Ctrl.sayHello(); 
     } 
    } 
}); 

Và HTML:

<input type="text" my-directive2 my-directive1> 

Bạn cũng có thể yêu cầu một bộ điều khiển chỉ thị từ một chỉ thị mẹ bằng cách viết require: '^myParentDirective', như thế này:

myApp.directive('myDirective1', function() { 
    return { 
     link: function($scope, elem, attrs) { 

     }, 
     controller: function() { 
      this.sayHello = function() { 
       alert("hello!"); 
      } 
     } 
    } 
}); 

myApp.directive('myDirective2', function() { 
    return { 
     require: '^myDirective1', 
     link: function($scope, elem, attrs, myDirective1Ctrl) { 
      myDirective1Ctrl.sayHello(); 
     } 
    } 
}); 

Và HTML:

<div my-directive1> 
    <div my-directive2></div> 
</div> 
+3

Cảm ơn bạn rất nhiều vì câu trả lời tuyệt vời! – Freewind

+18

Điều này chỉ prooves cách f ... phức tạp là tài liệu góc hiện tại. Họ chỉ không quan tâm. – honzajde

+0

@AndersEkdahl Bạn đề cập rằng điều này làm việc cho hai chỉ thị trên cùng một phần tử, và cũng cho các phần tử con và cha mẹ, nhưng nó có hoạt động cho các phần tử anh chị em không? Tôi đã nhìn thấy các ví dụ về việc này, nhưng tôi chưa bao giờ có thể làm cho nó hoạt động được. Tôi luôn luôn nhận được một lỗi của 'như vậy và như vậy' chỉ thị không có 'như vậy và như vậy' điều khiển. – Nocturno

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