. $ Emit ve. $ Yöntemlerini kullanarak $ scope nesnesimi bir denetleyiciden diğerine nasıl gönderebilirim?
$ Scope dahil, uygulamanızın hiyerarşisinde istediğiniz herhangi bir nesneyi gönderebilirsiniz .
İşte nasıl hakkında hızlı bir fikir yayın ve yayarlar çalışması.
Aşağıdaki düğümlere dikkat edin; tüm düğüm 3. kullanmak içinde yuvalanmış yayını ve EMIT Bu senaryoyu varken.
Not: Bu örnekteki her düğümün sayısı isteğe bağlıdır; kolayca bir numara olabilir; iki numara; hatta 1,348 sayısını. Her sayı bu örnek için sadece bir tanımlayıcıdır. Bu örneğin amacı, Açısal denetleyicilerin / direktiflerin iç içe geçmesini göstermektir.
3
------------
| |
----- ------
1 | 2 |
--- --- --- ---
| | | | | | | |
Bu ağaca bak. Aşağıdaki soruları nasıl cevaplıyorsunuz?
Not: Bu soruları yanıtlamanın başka yolları da vardır, ancak burada yayını tartışacağız ve yayınlayacağız . Ayrıca, aşağıdaki metni okurken, her sayının kendi dosyası (yönerge, denetleyici) ex one.js, two.js, three.js olduğunu varsayalım.
Düğüm 1 , düğüm 3 ile nasıl konuşur ?
One.js dosyasında
scope.$emit('messageOne', someValue(s));
Three.js dosyasında - iletişim kurmak için tüm alt düğümlere en üstteki düğüm.
scope.$on('messageOne', someValue(s));
Düğüm 2, düğüm 3 ile nasıl konuşur?
Two.js dosyasında
scope.$emit('messageTwo', someValue(s));
Three.js dosyasında - iletişim kurmak için tüm alt düğümlere en üstteki düğüm.
scope.$on('messageTwo', someValue(s));
Düğüm 3, düğüm 1 ve / veya düğüm 2 ile nasıl konuşur?
Three.js dosyasında - iletişim kurmak için tüm alt düğümlere en üstteki düğüm.
scope.$broadcast('messageThree', someValue(s));
Dosyasında one.js && two.js hangisi dosya mesajı veya her ikisini yakalamak istiyorum.
scope.$on('messageThree', someValue(s));
Düğüm 2, düğüm 1 ile nasıl konuşur?
Two.js dosyasında
scope.$emit('messageTwo', someValue(s));
Three.js dosyasında - iletişim kurmak için tüm alt düğümlere en üstteki düğüm.
scope.$on('messageTwo', function( event, data ){
scope.$broadcast( 'messageTwo', data );
});
One.js dosyasında
scope.$on('messageTwo', someValue(s));
ANCAK
Tüm bu iç içe geçmiş alt düğümler bu şekilde iletişim kurmaya çalıştığında, birçok $ on , $ broadcast ve $ emit'in .
İşte yapmaktan hoşlandığım şey.
En üstteki VELİ NODU'nda ( 3Üst denetleyiciniz olabilecek bu durumda ...) ...
Yani, three.js dosyasında
scope.$on('pushChangesToAllNodes', function( event, message ){
scope.$broadcast( message.name, message.data );
});
Şimdi alt düğümlerin herhangi birinde $ iletiyi yayınlamanız veya $ on kullanarak yakalamanız yeterlidir .
NOT: Normalde $ emit , $ broadcast veya $ on kullanmadan iç içe bir yolda çapraz konuşmayı yapmak oldukça kolaydır , bu da çoğu kullanım durumunun düğüm 1 ile düğüm 2 arasında iletişim kurmaya çalıştığınız veya tam tersi olduğu anlamına gelir .
Düğüm 2, düğüm 1 ile nasıl konuşur?
Two.js dosyasında
scope.$emit('pushChangesToAllNodes', sendNewChanges());
function sendNewChanges(){ // for some event.
return { name: 'talkToOne', data: [1,2,3] };
}
Three.js dosyasında - iletişim kurmak için tüm alt düğümlere en üstteki düğüm.
Bunu zaten hallettik hatırlıyor musun?
One.js dosyasında
scope.$on('talkToOne', function( event, arrayOfNumbers ){
arrayOfNumbers.forEach(function(number){
console.log(number);
});
});
Yine de yakalamak istediğiniz her bir değerle $ on kullanmanız gerekecek , ancak şimdi yakalayıp yayınlarken iletiyi üst düğüm boşluğu boyunca nasıl alacağınız konusunda endişelenmenize gerek kalmadan düğümlerden herhangi birinde istediğinizi oluşturabilirsiniz. genel pushChangesToAllNodes .
Bu yardımcı olur umarım...
$rootScope
kaçınılabileceği durumlarda yayın / yayın için kullanmayın.