Tôi đang cố gắng liên lạc giữa chỉ thị gốc và chỉ thị con lồng nhau của nó và cách khác. Tôi đã quản lý để đạt được điều này bằng cách sử dụng $ broadcast và $ emit, nhưng vì tôi đang chuyển một số đối số cho các chỉ thị, tôi đã phải tạo ra phạm vi cô lập trên các chỉ thị của tôi, vì vậy để phát $/$ emit công việc tôi phải phát 'lên một mức' trên phạm vi phụ huynh (phạm vi. $ parent. $ broadcast). Bây giờ chương trình phát sóng không chỉ tiếp tục với đứa trẻ lồng nhau, mà còn cho tất cả các chỉ thị ở cùng cấp độ mà tôi không muốn. Tôi đã tạo một plunker để hiển thị vấn đề, here. Điều tôi cần là khi nhấn một trong các nút, chỉ hướng dẫn trẻ em mới nhận được tin nhắn quảng bá và ngược lại. Tôi có thiếu một cái gì đó, hoặc là điều này không thể khi sử dụng phạm vi bị cô lập?Giao tiếp giữa các chỉ thị lồng nhau
Trong HTML của tôi:
<body ng-app="myApp">
<directive1 data-title="Click me to change name">
<directive2 data-name="John Smith"></directive2>
</directive1>
<directive1 data-title="Click me to change this other name">
<directive2 data-name="Gordon Freeman"></directive2>
</directive1>
</body>
Chỉ thị 1:
<div>
<button ng-click="changeName()">{{title}}</button>
<div ng-transclude></div>
</div>
Chỉ thị 2:
<div>
<h2>{{name}}</h2>
</div>
chỉ thị của tôi:
myApp.directive('directive1', function(){
return {
restrict: 'E',
replace: true,
templateUrl: 'Directive1.html',
transclude: true,
scope: {
title: '@'
},
link: function(scope, elem){
scope.changeName = function() {
scope.$parent.$broadcast('ChangeName');
};
scope.$parent.$on('NameChanged', function(event, args){
scope.title = 'Name changed to ' + args;
});
}
}
});
myApp.directive('directive2', function(){
return {
restrict: 'E',
replace: true,
templateUrl: 'Directive2.html',
scope: {
name: '@'
},
link: function(scope, elem){
scope.$on('ChangeName', function(event, args){
scope.name = 'Adam West';
scope.$emit('NameChanged', 'Adam West');
});
}
}
});
có một cái nhìn ở đây http://programmers.stackexchange.com/questions/223006/communication-between-nested-directives – user902383
Cảm ơn, nhưng tôi không nghĩ rằng bất kỳ đó là áp dụng ở đây; Tôi không muốn tiêm dịch vụ (dường như quá mức). Chỉ thị cha mẹ yêu cầu không hoạt động (tôi giả sử vì việc sử dụng transclude), và thực thi biểu thức trong phạm vi cha mẹ (thông qua &) sẽ hoạt động, nhưng chỉ có một cách (chức năng thực thi chỉ thị lồng nhau trên chỉ thị cha). –
bạn có xem xét việc đặt id cho chỉ thị không, chỉ có chỉ thị bên trong có cùng id như chỉ thị bên ngoài sẽ xử lý sự kiện. hãy xem ví dụ này http://plnkr.co/edit/dqGPDMF3f8NLBH4GX6dO?p=preview – user902383