Bilmeniz gereken bir şey $ öneki bir Açısal Yöntemi, $$ önekleri kullanmaktan kaçınmanız gereken açısal yöntemleri ifade eder.
Aşağıda örnek bir şablon ve denetleyicileri, $ broadcast / $ on öğesinin istediğimizi gerçekleştirmemize nasıl yardımcı olabileceğini keşfedeceğiz.
<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>
Kontrolörler
app.controller('FirstCtrl', function($scope){
$scope.register = function(){
}
});
app.controller('SecondCtrl', function($scope){
});
Size sorum, kullanıcı kayıt tıkladığında adı ikinci denetleyiciye nasıl ilettiğinizdir. Birden fazla çözüm bulabilirsiniz, ancak kullanacağımız $ broadcast ve $ on kullanıyor.
$ yayın vs $ emit
Hangisini kullanmalıyız? $ broadcast tüm alt dom öğelerine kanalize olur ve $ emit tüm ata dom öğelerine ters yönde kanal gönderir.
$ Emit veya $ broadcast arasında karar vermekten kaçınmanın en iyi yolu $ rootScope'tan kanal açmak ve tüm çocuklarına $ broadcast kullanmaktır. Bu da dom elemanlarımız kardeş olduğu için davamızı daha kolay hale getiriyor.
$ RootScope ekleme ve $ yayınlama imkanı
app.controller('FirstCtrl', function($rootScope, $scope){
$scope.register = function(){
$rootScope.$broadcast('BOOM!', $scope.name)
}
});
$ RootScope eklediğimizi ve şimdi $ broadcast (broadcastName, argümanlar) kullandığımızı unutmayın. BroadcastName için, bu adı secondCtrl dosyamızda yakalayabilmemiz için benzersiz bir ad vermek istiyoruz. BOOM'u seçtim! sadece eğlence için. İkinci argüman olan 'argümanlar' dinleyicilere değer aktarmamızı sağlar.
Yayınımızı almak
İkinci denetleyicimizde, yayınımızı dinlemek için kod ayarlamamız gerekiyor
app.controller('SecondCtrl', function($scope){
$scope.$on('BOOM!', function(events, args){
console.log(args);
$scope.name = args; //now we've registered!
})
});
Gerçekten bu kadar basit. Canlı Örnek
Benzer sonuçlara ulaşmanın diğer yolları
Bu yöntem paketini kullanmaktan kaçınmaya çalışın, çünkü ne etkili ne de bakımı kolaydır, ancak sahip olabileceğiniz sorunları düzeltmenin basit bir yoludur.
Aynı şeyi genellikle bir hizmet kullanarak veya denetleyicilerinizi basitleştirerek de yapabilirsiniz. Bunu ayrıntılı olarak tartışmayacağız ama sadece bütünlük için bahsedeceğimi düşündüm.
Son olarak, dinlemek için gerçekten yararlı bir yayının '$ destroy' olduğunu unutmayın, $ 'ın satıcı kodları tarafından oluşturulan bir yöntem veya nesne olduğunu görebilirsiniz. Her neyse $ destroy bir denetleyici yok edildiğinde yayınlanır, denetleyicinizin ne zaman kaldırıldığını öğrenmek için bunu dinlemek isteyebilirsiniz.