无法到达$ rootScope

下面的文件“工作”(它不会抛出任何错误的意义):

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

但是这个

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

给出错误:

错误:未知提供者:modx的$ rootScope
源文件: http : //code.angularjs.org/angular-1.0.0rc7.js
线路:2491

WTF?

您不能在configuration阶段要求实例 – 您只能询问提供者。

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

有关更多信息,请参见http://docs.angularjs.org/guide/module

我发现以下“模式”非常有用:

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

其中,MainCtrl是一个控制器。 依靠Controller函数的参数名称来做一对一的模拟实例,我感到不自在,因为担心我可能会改变名称并将其弄糟。 我更喜欢明确使用$注入这个目的。

不build议你像你那样使用语法。 AngularJs让你有自己想要的不同function( runconfigservicefactory等),这是更专业。在这个function,你甚至不需要自己注入

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

你可以使用它,如你所知。