Làm cách nào tôi có thể gửi đối tượng phạm vi $ của mình từ bộ điều khiển này sang bộ điều khiển khác bằng cách sử dụng. $ Emit và. $ Trên các phương thức?
Bạn có thể gửi bất kỳ đối tượng nào bạn muốn trong hệ thống phân cấp của ứng dụng, bao gồm $ scope .
Dưới đây là một ý tưởng nhanh về cách phát sóng và phát ra công việc.
Lưu ý các nút bên dưới; tất cả được lồng trong nút 3. Bạn sử dụng quảng bá và phát ra khi bạn có kịch bản này.
Lưu ý: Số lượng của mỗi nút trong ví dụ này là tùy ý; nó có thể dễ dàng là số một; số hai; hoặc thậm chí là số 1.348. Mỗi số chỉ là một định danh cho ví dụ này. Điểm của ví dụ này là hiển thị lồng các bộ điều khiển / chỉ thị Angular.
3
------------
| |
----- ------
1 | 2 |
--- --- --- ---
| | | | | | | |
Kiểm tra cây này. Làm thế nào để bạn trả lời các câu hỏi sau đây?
Lưu ý: Có nhiều cách khác để trả lời những câu hỏi này, nhưng ở đây chúng ta sẽ thảo luận về phát sóng và phát ra . Ngoài ra, khi đọc văn bản bên dưới, giả sử mỗi số có tệp riêng (chỉ thị, bộ điều khiển) ex one.js, Two.js, ba.js.
Làm thế nào để nút 1 nói với nút 3 ?
Trong tệp one.js
scope.$emit('messageOne', someValue(s));
Trong tệp ba.js - nút cao nhất cho tất cả các nút con cần thiết để giao tiếp.
scope.$on('messageOne', someValue(s));
Làm thế nào để nút 2 nói với nút 3?
Trong tệp Two.js
scope.$emit('messageTwo', someValue(s));
Trong tệp ba.js - nút cao nhất cho tất cả các nút con cần thiết để giao tiếp.
scope.$on('messageTwo', someValue(s));
Làm thế nào để nút 3 nói với nút 1 và / hoặc nút 2?
Trong tệp ba.js - nút cao nhất cho tất cả các nút con cần thiết để giao tiếp.
scope.$broadcast('messageThree', someValue(s));
Trong tệp one.js && Two.js bất kỳ tệp nào bạn muốn bắt thông báo hoặc cả hai.
scope.$on('messageThree', someValue(s));
Làm thế nào để nút 2 nói với nút 1?
Trong tệp Two.js
scope.$emit('messageTwo', someValue(s));
Trong tệp ba.js - nút cao nhất cho tất cả các nút con cần thiết để giao tiếp.
scope.$on('messageTwo', function( event, data ){
scope.$broadcast( 'messageTwo', data );
});
Trong tệp one.js
scope.$on('messageTwo', someValue(s));
TUY NHIÊN
Khi bạn có tất cả các nút con lồng nhau này cố gắng giao tiếp như thế này, bạn sẽ nhanh chóng thấy nhiều nút $ on , $ Broadcast và $ emit .
Đây là những gì tôi muốn làm.
Trong PARENT NODE cao nhất ( 3 trong trường hợp này ...), có thể là bộ điều khiển chính của bạn ...
Vì vậy, trong tệp ba.js
scope.$on('pushChangesToAllNodes', function( event, message ){
scope.$broadcast( message.name, message.data );
});
Bây giờ trong bất kỳ nút con nào, bạn chỉ cần $ phát ra thông báo hoặc bắt nó bằng cách sử dụng $ on .
LƯU Ý: Thông thường khá dễ dàng để nói chuyện chéo trong một đường dẫn lồng nhau mà không sử dụng $ emit , $ Broadcast hoặc $ on , điều đó có nghĩa là hầu hết các trường hợp sử dụng là khi bạn đang cố gắng để nút 1 giao tiếp với nút 2 hoặc ngược lại.
Làm thế nào để nút 2 nói với nút 1?
Trong tệp Two.js
scope.$emit('pushChangesToAllNodes', sendNewChanges());
function sendNewChanges(){ // for some event.
return { name: 'talkToOne', data: [1,2,3] };
}
Trong tệp ba.js - nút cao nhất cho tất cả các nút con cần thiết để giao tiếp.
Chúng tôi đã xử lý này nhớ chưa?
Trong tệp one.js
scope.$on('talkToOne', function( event, arrayOfNumbers ){
arrayOfNumbers.forEach(function(number){
console.log(number);
});
});
Bạn vẫn sẽ cần sử dụng $ on với từng giá trị cụ thể mà bạn muốn nắm bắt, nhưng bây giờ bạn có thể tạo bất cứ thứ gì bạn thích trong bất kỳ nút nào mà không phải lo lắng về cách đưa thông điệp qua khoảng cách nút cha khi chúng tôi bắt và phát PushChangesTo ALLNodes chung .
Hi vọng điêu nay co ich...
$rootScope
để phát / phát khi có thể tránh được.