varios entre directivas controladores controlador comunicacion javascript angularjs dependency-injection angularjs-scope angularjs-controller

javascript - entre - AngularJS: inyecte el controlador dentro de otro controlador desde el mismo módulo



registrar controlador angular (4)

¿Es posible inyectar un controlador en otro controlador que forma parte del mismo módulo?

ejemplo:

var app = angular.module(''myAppModule'', []) .controller(''controllerOne'', [''$scope'', function($scope){ $scope.helloWorld = function(){ return ''Hello World''; } }]) .controller(''controllerTwo'', [''$scope'', ''controllerOne'', function($scope, controllerOne){ console.log(controllerOne.helloWorld()); }])

Sigo recibiendo proveedor desconocido en controllerOne. No veo cómo eso es posible ya que conviven en el mismo módulo. Cualquier ayuda sería muy apreciada.


Debe usar la dependencia de $controller que puede inyectar un controlador a otro

.controller(''controllerTwo'', [''$scope'', ''$controller'', function($scope, $controller){ $controller(''controllerOne'', {$scope: $scope}) //inside scope you the controllerOne scope will available }]);

Pero prefiero service/factory para compartir datos


Mueva su lógica a un "servicio" (ya sea una fábrica / servicio / proveedor). Personalmente prefiero las fábricas, me gusta controlar mi propio objeto en lugar de usar this o algo así con las otras opciones.

Al usar un servicio, usted se da la capacidad de abstraer la lógica de negocios de sus controladores y hacer que esa lógica sea reutilizable.

var app = angular.module(''myAppModule'', []) // typically people use the word Service at the end of the name // even if it''s a factory (it''s all the same thing really... .factory(''sharedService'', function () { var methods = {}; methods.helloWorld = function () { return ''Hello World!''; }; // whatever methods/properties you have within this methods object // will be available to be called anywhere sharedService is injected. return methods; })

Aviso de SharedService se inyecta

.controller(''ControllerOne'', [''$scope'', ''sharedService'', function($scope, sharedService) { $scope.helloWorld = sharedService.helloWorld(); }]) // Notice sharedService is injected here as well .controller(''ControllerTwo'', [''$scope'', ''sharedService'', function($scope, sharedService){ // Now we can access it here too! console.log( sharedService.helloWorld() ); }]);

Nota al margen: ¡Los controladores deben estar en mayúsculas para mostrar su significado!

El poder de los servicios :)


No puede inyectar controladores en otros controladores, solo los ServiceProviers son inyectables. Esa es la razón por la que está recibiendo un error como proveedor desconocido en el controlador uno.

Utilice Servicios en lugar de inyectarlos en los controladores, si hay alguna funcionalidad para compartir entre los controladores. Los servicios son la mejor manera de compartir datos entre los controladores.

Puede declarar una variable o función o decir objeto en $ rootScope , existe en toda su aplicación.

Compartir datos entre los controladores AngularJS


Si el controlador dos necesita llamar a la misma función que el controlador uno, es posible que desee crear un servicio para manejarlo. Servicios angulares : son accesibles a través de su programa a través de la inyección de dependencia.

var app = angular.module(''myAppModule'', []) .controller(''controllerOne'', [''$scope'', ''Hello'', function($scope, Hello){ console.log(Hello.helloWorld() + '' controller one''); }]) .controller(''controllerTwo'', [''$scope'', ''Hello'', function($scope, Hello){ console.log(Hello.helloWorld() + '' controller two''); }]) .factory(''Hello'', [function() { var data = { ''helloWorld'': function() { return ''Hello World''; } } return data; }]);

¡Espero que esto ayude!