2016-03-29 22 views
1
üzerinde

Biri gerçek sayfa için bir tane ve bir başarı için bir tane olmak üzere 2 kontrolör yaptım. Modal denetleyiciden bile bir yayın alıyorum ve hatta sayfa denetleyicisinde bile dinliyorum. Kapsam değişkeninin geçerli örneğine başvurmak için 'this' kullanıyorum. Ancak, $ on dinleyicisinde, kapsam değişkenini kullanmaya çalıştığımda, boş bulunur ve bu nedenle sayfa denetleyicisi değişkenlerini değiştiremiyorum. Modal denetleyicisinde

$rootScope.$on('backToFetch', function() { 
      for(var i=0; i < this.fetchUploader.documentData.length; i++) { 
       this.fetchUploader.documentData[i].isSuccess = false; 
       this.fetchUploader.progress = 0; 
      } 
      deleteFormFields() 
     }); 

: sayfa denetleyicisinde

$rootScope.$broadcast('backToFetch'); 

Ben Sen kapsam durumunu kopyalayabilirsiniz

+0

Hangi kapsamda? Bir uygulamada tonlarca alan olabilir – Dalorzo

+0

Niçin başarmaya çalıştığınız buysa, bu '' '' '' '' '' '' '' '' 'nı kullanıp kullanmayın? –

+0

Genel olarak, etkinliğinize veri gönderirsiniz. Yani $ rootScope. $ Yayını ('backToFetch', 'Bazı ekstra veriler'); 've işleyicinizde bu verileri alırsınız: '$ rootScope. $ On (' backToFetch ', fonksiyon (e, data) {});' Veriler herhangi bir şey olabilir. Ayrıca, denetleyicileriniz arasındaki hiyerarşi nedir, '$ rootScope''u kirletmeniz gerekmeyebilir. – ste2425

cevap

0

dinleyici $ üzerine içeride kapsamı değişkenin referans almak nasıl event arguments için, aşağıdaki gibi:

$rootScope.$broadcast('backToFetch', { 
    scope: angular.extend($scope, {}) 
}); 

Ve şimdi o kadar gibi değer okuyabilir:

$rootScope.$on('backToFetch', function(event, args) { 
    console.log(args.scope); 
}); 

Bu kaynak denetleyici kapsamını değiştirmez. Bir denetleyicinin doğrudan başka bir denetleyicinin kapsamını değiştirmemesi gerektiğinden, bu işlem olayların kullanılmasıyla gerçekleştirilmelidir.

İkincisi sen kopya yalnızca bu argümanlar kapsamında dan ihtiyacınız olduğunu, bütün kapsamını kopyalama bir overkill -kötü uygulama olabilir olmalıdır.

+0

Önerdiğiniz gibi, yayın denetleyicisindeki değerleri değiştirmeye yardımcı olur, ancak bu yayını dinleyen denetleyicinin değerlerini değiştirmem gerekiyor. Kapsam dinleyicinin içinde null olarak bulunur. –

+0

Peki neden dinleyicinizden başka bir etkinlik göndermiyorsunuz, bu kaynak denetçisi tarafından yakalanacak mı? Bu konuda daha fazla bilgiyi burada bulabilirsiniz: http://stackoverflow.com/questions/28806321/angularjs-can-i-change-scope-value-of-a-controller-from-another-controller – Beri

İlgili konular