Bagaimana saya bisa mengirim objek $ scope saya dari satu controller ke yang lain menggunakan metode $ emit dan. $ On?
Anda dapat mengirim objek apa pun yang Anda inginkan dalam hierarki aplikasi Anda, termasuk $ scope .
Berikut adalah ide singkat tentang bagaimana siaran dan memancarkan kerja.
Perhatikan simpul-simpul di bawah ini; semua bersarang dalam simpul 3. Anda menggunakan siaran dan memancarkan ketika Anda memiliki skenario ini.
Catatan: Jumlah setiap node dalam contoh ini adalah arbitrer; bisa dengan mudah menjadi yang pertama; nomor dua; atau bahkan nomor 1.348. Setiap angka hanyalah pengidentifikasi untuk contoh ini. Maksud dari contoh ini adalah untuk menunjukkan bersarangnya pengontrol / arahan sudut.
3
------------
| |
----- ------
1 | 2 |
--- --- --- ---
| | | | | | | |
Lihatlah pohon ini. Bagaimana Anda menjawab pertanyaan-pertanyaan berikut?
Catatan: Ada cara lain untuk menjawab pertanyaan-pertanyaan ini, tetapi di sini kita akan membahas siaran dan emisi . Juga, ketika membaca teks di bawah ini anggap setiap angka memiliki file sendiri (direktif, controller) ex one.js, two.js, three.js.
Bagaimana simpul 1 berbicara dengan simpul 3 ?
Dalam file one.js
scope.$emit('messageOne', someValue(s));
Dalam file three.js - simpul paling atas untuk semua simpul anak yang diperlukan untuk berkomunikasi.
scope.$on('messageOne', someValue(s));
Bagaimana simpul 2 berbicara dengan simpul 3?
Dalam file two.js
scope.$emit('messageTwo', someValue(s));
Dalam file three.js - simpul paling atas untuk semua simpul anak yang diperlukan untuk berkomunikasi.
scope.$on('messageTwo', someValue(s));
Bagaimana simpul 3 berbicara dengan simpul 1 dan / atau simpul 2?
Dalam file three.js - simpul paling atas untuk semua simpul anak yang diperlukan untuk berkomunikasi.
scope.$broadcast('messageThree', someValue(s));
Dalam file one.js && two.js file mana saja yang ingin Anda tangkap pesannya atau keduanya.
scope.$on('messageThree', someValue(s));
Bagaimana simpul 2 berbicara dengan simpul 1?
Dalam file two.js
scope.$emit('messageTwo', someValue(s));
Dalam file three.js - simpul paling atas untuk semua simpul anak yang diperlukan untuk berkomunikasi.
scope.$on('messageTwo', function( event, data ){
scope.$broadcast( 'messageTwo', data );
});
Dalam file one.js
scope.$on('messageTwo', someValue(s));
NAMUN
Ketika Anda memiliki semua simpul anak bersarang yang mencoba berkomunikasi seperti ini, Anda akan dengan cepat melihat banyak $ on , $ broadcast , dan $ emit .
Inilah yang ingin saya lakukan.
Di PARENT NODE paling atas ( 3 dalam hal ini ...), yang mungkin merupakan pengendali orang tua Anda ...
Jadi, dalam file three.js
scope.$on('pushChangesToAllNodes', function( event, message ){
scope.$broadcast( message.name, message.data );
});
Sekarang di salah satu node anak Anda hanya perlu $ memancarkan pesan atau menangkapnya menggunakan $ on .
CATATAN: Biasanya cukup mudah untuk melakukan percakapan silang dalam satu jalur bertingkat tanpa menggunakan $ emit , $ broadcast , atau $ on , yang berarti sebagian besar kasus penggunaan adalah ketika Anda mencoba untuk mendapatkan simpul 1 untuk berkomunikasi dengan simpul 2 atau sebaliknya.
Bagaimana simpul 2 berbicara dengan simpul 1?
Dalam file two.js
scope.$emit('pushChangesToAllNodes', sendNewChanges());
function sendNewChanges(){ // for some event.
return { name: 'talkToOne', data: [1,2,3] };
}
Dalam file three.js - simpul paling atas untuk semua simpul anak yang diperlukan untuk berkomunikasi.
Kami sudah menangani yang ini ingat?
Dalam file one.js
scope.$on('talkToOne', function( event, arrayOfNumbers ){
arrayOfNumbers.forEach(function(number){
console.log(number);
});
});
Anda masih perlu menggunakan $ pada dengan setiap nilai spesifik yang ingin Anda tangkap, tetapi sekarang Anda dapat membuat apa pun yang Anda suka di salah satu node tanpa harus khawatir tentang bagaimana untuk mendapatkan pesan melintasi celah simpul orangtua saat kami menangkap dan menyiarkan pushChangesToAllNodes generik .
Semoga ini membantu...
$rootScope
untuk siaran / siaran ketika itu bisa dihindari.