Entonces, sé que hay otras soluciones aquí... pero mi situación es única.
El primer controlador, y sí, esto está en AngularJS para una gran empresa de telecomunicaciones, tiene varias variables $scope únicas que no se pueden mover ni copiar. ¡Este código es un DESORDEN!
Entonces, he intentado:
$rootScope.CallMainFunction, (incomingData) => { $scope.mainFunction(incomingData); };y la función principal está aquí... todo complejo pero lo he simplificado
$scope.mainFunction = (data) => { --- Do lots of stuff here with lots of variables NOT available anywhere else }La función de llamada:
$rootScope.$emit.CallMainFunction(id);Los dos controladores están separados por dos carpetas:
--- MODULES (just the name of the directory) ---| folder 1 ---| folder 2 ---| folder 3 ---| folder 50 <-- YEAH there are this many.PODRÍA hacer un servicio, pero esta es una aplicación tan disfuncional que llevará semanas. Esa es la forma CORRECTA de hacerlo "SI" estaba en Angular 6 - 14.
Entonces, me quedo con tratar de llamar a una función a una función dentro de otro controlador. ¿Pensamientos por favor?
Suponiendo que el controlador 'enviador' es un padre del controlador 'receptor' (ya que se envía a través de $rootScope), puede transmitir el evento y luego ejecutar la función en su propio controlador.
//broadcast the event down $rootScope.CallMainFunction = function (someData) { $scope.$broadcast("callMainFunction", someData); }Luego, en el controlador receptor, escuche el evento. Además, no olvides matar al oyente cuando el controlador se descargue.
//handle SendDown event var myListener = $scope.$on("callMainFunction", function (evt, data) { $scope.theMainFunction(data) }); $scope.$on('$destroy', myListener);