web-dev-qa-db-fra.com

Impossible d'accéder à $ rootScope

Le fichier suivant "fonctionne" (en ce sens 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 ça

<!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: fournisseur inconnu: $ rootScope de modx
Fichier source: http://code.angularjs.org/angular-1.0.0rc7.js
Ligne: 2491

WTF?

161
Malvolio

Vous ne pouvez pas demander, par exemple, lors de 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.

304
Vojta

J'ai trouvé le "motif" 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 lorsque je compte sur les noms de paramètres de la fonction Contrôleur qui imite les instances un par un, de peur de changer de nom et de tout gâcher. Je préfère de loin utiliser explicitement $ inject à cette fin.

6
Ram Rajamony

Je ne suggère pas vous utilisez la syntaxe comme vous l'avez fait. AngularJs vous permet d’avoir différentes fonctionnalités à votre guise (run, config, service, factory, etc.,), qui sont plus professionnelles.Dans cette fonction 'même pas d'injecter cela par vous-même comme

MainCtrl.$inject = ['$scope', '$rootScope', '$location', 'socket', ...];

vous pouvez l'utiliser, comme vous le savez.

0
Hazarapet Tunanyan