angularjs - event - No se puede llegar a $ rootScope
rootscope between controllers (3)
El siguiente archivo "funciona" (la sensación de que no arroja ningún error):
<!doctype html>
<html ng-app="modx">
<script src="http://code.angularjs.org/angular-1.0.0rc7.js"></script>
<script>
angular.module("modx", [], function($routeProvider) {
});
</script>
</html>
pero esto
<!doctype html>
<html ng-app="modx">
<script src="http://code.angularjs.org/angular-1.0.0rc7.js"></script>
<script>
angular.module("modx", [], function($routeProvider, $rootScope) {
});
</script>
</html>
da el error:
Error: proveedor desconocido: $ rootScope de modx
Archivo fuente: http://code.angularjs.org/angular-1.0.0rc7.js
Línea: 2491
WTF?
He encontrado que el siguiente "patrón" es muy útil:
MainCtrl.$inject = [''$scope'', ''$rootScope'', ''$location'', ''socket'', ...];
function MainCtrl (scope, rootscope, location, thesocket, ...) {
donde, MainCtrl es un controlador. No me siento cómodo confiando en los nombres de los parámetros de la función del Controlador haciendo una imitación uno a uno de las instancias por temor a que cambie los nombres y arruine las cosas. Prefiero usar explícitamente $ inject para este propósito.
No sugiero que use la sintaxis como lo hizo. AngularJs te permite tener diferentes funcionalidades como desees ( run
, config
, service
, factory
, etc.), que son más profesionales. En esta función ni siquiera tienes que inyectar eso por ti mismo como
MainCtrl.$inject = [''$scope'', ''$rootScope'', ''$location'', ''socket'', ...];
puedes usarlo, como sabes.
No puede pedir, por ejemplo, durante la fase de configuración; puede solicitar solo proveedores.
var app = angular.module(''modx'', []);
// configure stuff
app.config(function($routeProvider, $locationProvider) {
// you can inject any provider here
});
// run blocks
app.run(function($rootScope) {
// you can inject any instance here
});
Consulte http://docs.angularjs.org/guide/module para obtener más información.