2014-12-30 13 views
12

Ist das, wie zwischen zwei Komponenten, die Scope-Geschwister sind, korrekt zu kommunizieren?Kommunikation zwischen Geschwisterbereichen in Angular

  1. Ctrl1 gibt das Ereignis bis zum übergeordneten Bereich von Ctrl1 und Ctrl2 aus.
  2. Der übergeordnete Bereich überwacht das ausgegebene Ereignis von Ctrl1 und sendet dann ein anderes Ereignis an Ctrl2.
  3. Ctrl2 überwacht Broadcast-Ereignisse vom übergeordneten Bereich.

diagram

Antwort

5

Ja, das ist, wie ich zwischen Geschwister Bereiche in Angular kommunizieren. Normalerweise denke ich an Ctrl1, dass es alle untergeordneten Bereiche ausgibt und dass ein übergeordnetes Oszilloskop dem Ereignis zuhört, während das übergeordnete Oszilloskop auf alle untergeordneten Bereiche "nach unten" sendet. In diesem Fall sollte Ctrl2 etwas eingeschaltet haben, um etwas zu tun, sobald es das Ereignis hört.

Als eine Randnotiz, ich habe etwas ähnliches getan, wo ich das rootScope als einen zentralen Ereignis-Bus verwendet hat, wo es verschiedene Ereignisse des untergeordneten Bereichs abgehört und führt dann einige Aufgaben oder Sendungen wieder herunter. Die Childs Scopes wären dann dafür verantwortlich, einfach bis zum RootScope zu senden.

4

Nun - Sie brauchen technisch nicht $emit bei der Kommunikation bis zu übergeordneten Steuerungen, hat das Kind Zugriff. Aber Sie $broadcast brauchen, wenn sie ein Kind Umfang in Verbindung stehen unten:

app.controller("parentCtrl", function($scope) { 
    $scope.testMe = function() { 
     $scope.$broadcast("done"); //transmit to ctrl2 
    } 
}); 

app.controller("childCtrl1", function($scope) { 
    $scope.testMe(); //call parent 
}); 

app.controller("childCtrl2", function($scope) { 
    $scope.$on("done", function() { 
     alert("Caught parent event"); 
    }); 
}); 
+2

Was passiert, wenn der Umfang in 'childCtrl1' wirklich Anwendungsbereich einer Richtlinie isolieren? – core