Abhängig von:
myApp.controller('MapCtrl', ['$scope', '$http', function ($scope, $http) {
$scope.loadData = function() {
$http.get('/map/GetListDB').success(function (data, status, headers, config) {
//Logic here is working fine, it creates a table named "ExcelCols" which is a table of strings
$scope.$broadcast("SET_EXCEL_TITLES", $scope.ExcelCols);
})
}
}]);
Hier ist der zweite Controller
myApp.controller('ExcelViewCtrl', ['$scope', '$http', function($scope, $http) {
$scope.$on("SET_EXCEL_TITLES", function (event, excelCols) {
//this event is never fired
$scope.ExcelCols = excelCols;
});
}]);
Meine Ansicht, dass die Art und Weise gestaltet ist Wie die Controller strukturiert sind zu $broadcast
Nachricht würde geroutet werden.
Per documentation
Sendet ein Ereignis Namen nach unten auf alle untergeordneten Bereiche (und ihre Kinder ) Anmeldern der registrierten ng. $ RootScope.Scope # $ auf die Zuhörer.
Das bedeutet, dass der Controller, der die Übertragung sendet, auf dem übergeordneten HTML des untergeordneten Controllers HTML definiert sein sollte.
Basierend auf Ihre HTML-Struktur verwenden $rootScope.$broadcast
. Injizieren Sie die $rootScope
in die MapCtrl
und rufen $broadcast
Methode auf sie.
Wie werden die Controller instanziiert? Sind "ExcelViewCtrl" und sein Bereich untergeordnete Elemente von "MapCtrl"? Sehen Sie den Unterschied zwischen '$ broadcast' und' $ emit'. –
Vielleicht habe ich diesen Punkt missverstanden. Ich denke, dass $ emit wird verwendet, um eine Nachricht an die Eltern zu senden, und Broadcast verwendet, um etwas an jeden Controller senden –