Ich habe hier ein Problem mit $ Broadcasting-Ereignis zu einem anderen Controller. Also hier ist der Deal. In der Fußzeile der Website habe ich einen anderen Controller geladen (den CMSController). Außerdem habe ich eine Route/Hilfe, wo dieser Controller auch Help Center-Daten von CMS lädt und bekommt. Es gibt Links in der Fußzeile, die damit verbunden sind. Lassen Sie uns den Link "Allgemeine Geschäftsbedingungen" sagen. Um diese Daten zu erhalten, muss ich zur '/ help' route gehen und die getHelpPage() Funktion aufrufen. Das ist die laufende Projektstruktur, an der ich arbeite. Also von Fußzeile I '/ help' Weg bin Umleitung und ein Ereignis sendet, die ich auf theCMSController hören bin und rufen getHelpPage()Ermitteln, wenn der Controller bei der Routenänderung voll geladen ist
$scope.openHelpCenterPage = function openHelpCenterPage(slug) {
if($location.path().indexOf('/help') === -1){
$location.path('/help');
}
$rootScope.$broadcast('openHelpCenterPage', {slug: slug, from: 'footer'});
};
Und in der CMSController
$rootScope.$on('openHelpCenterPage', function (event, obj) {
$scope.getHelpPage(obj.slug);
});
Das Problem ist, dass dies nicht funktioniert. Ich denke, der CMSController ist nicht geladen, was passiert. Keine Fehler in der Konsole.
jedoch .... Puring die boradcast in $ Timeout löst das Problem auch bei 0 Sekunden ..
$timeout(function() {
$rootScope.$broadcast('openHelpCenterPage', {slug: slug, from: 'footer'});
},0);
Aber ich fühle mich nicht wie ti ist eine gute Lösung. Irgendwelche anderen Ideen ??? Ich habe auch versucht routeChangeSuccess nach dem Hören openHelpCenterPage $ zu hören, aber auch hier keine Ergebnisse ....
$rootScope.$on('openHelpCenterPage', function (event, obj) {
$rootScope.$on('$routeChangeSuccess',function(){
$scope.getHelpPage(obj.slug);
})
});
vielleicht andere Möglichkeiten, um herauszufinden, ob Controller vollständig geladen ist ???? Vielen Dank für Ihre Zeit. Hoffe, ich habe das Problem gut erklärt.
versuchen, auf Ereignisse in einem relevanten Bereich mit '$ scope. $ auf (...)' anstelle von '$ rootScope zu hören. $ auf (...) '; ändert sich etwas, wenn Sie '$ emit' anstelle von' $ broadcast' verwenden (für '$ emit' benötigen Sie tatsächlich' $ rootScope. $ on' though)? –
danke für die antwort. Leider funktioniert es nicht so. – Artdark92