Ich habe zwei Codeabschnitte in zwei separaten Controllern (in zwei separaten JS-Dateien); Einer löst ein Angular $scope.$broadcast
-Ereignis und der andere einen $scope.$on
-Listener aus.
Erste Controller (Datei) Schnipsel:
var Controller1 = function($scope) {
$scope.triggerMyEvent = function(){
$scope.$broadcast('triggeredEvent');
}
$scope.go = function (path) {
$location.path(path);
};
}
zweiten Controller (Datei) Snippet:
var Controller2 = function($scope) {
$scope.$on('triggeredEvent',function(event){
console.log('found triggered event');
});
}
Die Anwendung zusammen verdrahtet ist wie folgt:
var app = angular.module("myApp", ["ngRoute"]);
app.config(function($routeProvider) {
$routeProvider
.when("/page2", {
controller : Controller2
template : "/page2.html"
})
.otherwise({
template : "<p>Error</p>"
});
});
Der erste Controller wird durch eine ng-controller
Direktive in der Datei index.html referenziert; und die andere Datei, page2.html oben aufgeführt wird verwiesen und von Aktionen auf dem Index geladen:
index.html:
<body ng-controller="Controller1">
<button ng-click="go('/page2.html')">Page 2</button>
</body>
Das erste Mal, dass ich diesen Code lade das $scope.$broadcast
Ereignis ausgelöst wird und die $scope.$on
Zuhörer fängt es einfach gut; wenn ich es neu laden, obwohl der $scope.$on
Listener es nicht abfängt. Um es klar zu sagen, bei einer anfänglichen Ladung wird das Ereignis ausgelöst und gerade gut erfasst; also wenn ich meinen Server neu starte und auf die Seite zugreife. Wenn ich jedoch die Seite aktualisiere (F5), glaube ich, dass das Ereignis ausgelöst, aber nicht abgefangen wird. Ich bin neu damit zu arbeiten, also vermute ich einen Mangel an Wissen, aber ich habe über $ scope/$ rootScope und Dinge wie $ broadcast/$ emit/$ gelesen. Jede Hilfe wird geschätzt. Ich sehe eine Reihe von Artikeln zu verwandten Themen; nichts unmittelbar Relevantes sehen;
Angular $broadcast only updating after page refresh
AngularJS event-based communication through isolate scope
Die vielversprechendsten Verweise auf Isolieren verwendet, aber ich habe nicht in der Lage, etwas zu bekommen, noch zu arbeiten: obwohl ich diesen Artikel tat beachten.
Wir müssen den Rest des Codes sehen. Dies ist einfach nicht genug Informationen, um Ihre Frage zu beantworten. Wie wird 'triggerMyEvent' aufgerufen? Gibt es relevante Vorlagen?Lassen Sie uns die Controller-Definitionen sehen –
Hallo, danke, ich werde versuchen, mehr relevanten Code hinzuzufügen; Aber ich rufe einfach die Funktion an und benutze die Konsolenprotokollierung (nicht oben gezeigt), um zu sehen, dass sie jedes Mal ausgelöst wird. – Gedalya
Ich habe den Code aktualisiert, um ein vollständigeres Bild zu erhalten. – Gedalya