2014-09-07 4 views
1

Exemple:

<div ng-controller="ParentCtrl as parent" class="ng-scope"> 
    { { parent.data } } 
    <div ng-controller="SiblingOneCtrl as sib1" class="ng-scope"> 
     { { sib1.data } } 
    </div> 
</div> 


<script> 
function ParentCtrl ($scope) { 

    $scope.$broadcast('parent', 'Some data'); // идет вниз! 

} 
function SiblingOneCtrl ($scope) { 

    $scope.$on('parent', function (event, data) { 
    console.log(data); // ‘Some data’ 
    }); 
} 
</script> 

Télécharger un échantillon sur ce forum et les gens écrivent travail

ouvrir la console, je ne l'ai pas vu des effets conseils d'attente vous ..thank indifférents

+4

Peut-être parce que son tir avant frère est initialisé. Essayez-le avec $ timeout dans parentctrl. – foxx

+2

essayez de mettre vos scripts dans la fonction '$ (document) .ready' – Farshad

+1

merci foxx ..... Fonctionne ... –

Répondre

4

Happens très probablement parce qu'il déclenche la diffusion avant que cet auditeur dans le frère soit même créé.

a) ne diffusent pas immédiatement, en utilisant retard ($timeout) par exemple ..

b) ou transmettre les données d'une autre manière, en utilisant l'héritage de prototype ou même un service (défini dans le parent et obtenir c) vous avez très probablement envie de diffuser quelque chose sur ng-clic ou quelque chose de toute façon, n'est-ce pas? Dans ce cas, cela devrait fonctionner correctement.

4

foxx a dit à droite Essayez avec avec $ timeout en parentctrl comme:

function ParentCtrl ($scope,$timeout) { 
this.data="r"; 
$timeout(function(){ 
    $scope.$broadcast('parent', 'Some data'); // идет вниз! 
},1000) 


} 
function SiblingOneCtrl ($scope) { 

    $scope.$on('parent', function (event, data) { 
    console.log(data); // ‘Some data’ 
    }); 
} 

see plunker pour le code de travail

+3

pas besoin de 1000 délai en $ timeout, même 0 milliseconde fonctionnerait –