Satu hal yang harus Anda ketahui adalah $ awalan merujuk ke Metode Angular, $$ awalan mengacu pada metode sudut yang harus Anda hindari menggunakan.
di bawah ini adalah contoh template dan pengontrolnya, kita akan mengeksplorasi bagaimana $ broadcast / $ on dapat membantu kita mencapai apa yang kita inginkan.
<div ng-controller="FirstCtrl">
<input ng-model="name"/>
<button ng-click="register()">Register </button>
</div>
<div ng-controller="SecondCtrl">
Registered Name: <input ng-model="name"/>
</div>
Kontrolernya adalah
app.controller('FirstCtrl', function($scope){
$scope.register = function(){
}
});
app.controller('SecondCtrl', function($scope){
});
Pertanyaan saya kepada Anda adalah bagaimana Anda memberikan nama ke pengontrol kedua ketika pengguna mengklik daftar? Anda mungkin menemukan beberapa solusi tetapi yang akan kita gunakan adalah menggunakan $ broadcast dan $ on.
$ broadcast vs $ emit
Yang mana yang harus kita gunakan? $ broadcast akan disalurkan ke semua elemen dom anak-anak dan $ emit akan menyalurkan arah yang berlawanan ke semua elemen dom leluhur.
Cara terbaik untuk menghindari memutuskan antara $ emit atau $ broadcast adalah menyalurkan dari $ rootScope dan menggunakan $ broadcast untuk semua anak-anaknya. Yang membuat kasus kami jauh lebih mudah karena elemen dom kami adalah saudara kandung.
Menambahkan $ rootScope dan memungkinkan $ broadcast
app.controller('FirstCtrl', function($rootScope, $scope){
$scope.register = function(){
$rootScope.$broadcast('BOOM!', $scope.name)
}
});
Perhatikan kami menambahkan $ rootScope dan sekarang kami menggunakan $ broadcast (broadcastName, argumen). Untuk broadcastName, kami ingin memberinya nama yang unik sehingga kami dapat menangkap nama itu di Ctrl kedua kami. Saya telah memilih BOOM! hanya untuk bersenang-senang. Argumen kedua 'argumen' memungkinkan kita memberikan nilai kepada pendengar.
Menerima siaran kami
Di pengontrol kedua kami, kami perlu mengatur kode untuk mendengarkan siaran kami
app.controller('SecondCtrl', function($scope){
$scope.$on('BOOM!', function(events, args){
console.log(args);
$scope.name = args; //now we've registered!
})
});
Sangat sederhana. Contoh Langsung
Cara lain untuk mencapai hasil yang serupa
Cobalah untuk menghindari menggunakan rangkaian metode ini karena tidak efisien dan tidak mudah untuk dipelihara tetapi ini adalah cara sederhana untuk memperbaiki masalah yang mungkin Anda miliki.
Anda biasanya dapat melakukan hal yang sama dengan menggunakan layanan atau dengan menyederhanakan controller Anda. Kami tidak akan membahas ini secara rinci, tetapi saya pikir saya hanya akan menyebutkannya untuk kelengkapan.
Terakhir, perlu diingat siaran yang sangat berguna untuk didengarkan adalah '$ destroy' lagi Anda dapat melihat $ berarti itu adalah metode atau objek yang dibuat oleh kode vendor. Anyways $ destroy disiarkan ketika controller hancur, Anda mungkin ingin mendengarkan ini untuk mengetahui kapan controller Anda dihapus.