161 votes

Impossible d'accéder à $rootScope

Le fichier suivant "fonctionne" (c'est-à-dire qu'il ne génère aucune erreur) :

<!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>

mais ceci

<!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>

donne l'erreur :

Erreur : Unknown provider : $rootScope de modx
Fichier source : http://code.angularjs.org/angular-1.0.0rc7.js
Ligne : 2491

WTF ?

306voto

Vojta Points 12058

Vous ne pouvez pas demander d'exemple pendant la phase de configuration - vous ne pouvez demander que des fournisseurs.

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
});

Voir http://docs.angularjs.org/guide/module pour plus d'informations.

6voto

Ram Rajamony Points 760

J'ai trouvé le "modèle" suivant très utile :

MainCtrl.$inject = ['$scope', '$rootScope', '$location', 'socket', ...];
function MainCtrl (scope, rootscope, location, thesocket, ...) {

où, MainCtrl est un contrôleur. Je ne suis pas à l'aise avec l'idée de me fier aux noms des paramètres de la fonction Controller pour imiter les instances une par une, de peur de changer les noms et de tout gâcher. Je préfère de loin utiliser explicitement $inject dans ce but.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X