无法获得$ rootScope

Mal*_*lio 161 angularjs

以下文件"有效"(它不会抛出任何错误):

<!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>
Run Code Online (Sandbox Code Playgroud)

但是这个

<!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>
Run Code Online (Sandbox Code Playgroud)

给出错误:

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

WTF?

Voj*_*jta 306

您无法在配置阶段询问 - 例如,您只能询问提供商.

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
});
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅http://docs.angularjs.org/guide/module.

  • @Mavolio不,他是3核心开发者之一. (143认同)
  • 谢谢,这很有道理,但你怎么知道的?它是在文档中吗? (9认同)
  • 好吧,FWIW,现在是在"模块加载和依赖关系"部分下的文档中. (8认同)
  • @vittore我认为,把这个"外部"配置放到全局窗口中就可以了.或者有一个模块定义所有这些东西,然后将其加载到您的应用程序中 - 例如.`angular.module('config',[]).constant('appRoot','/ local/js/app');`(这段代码将由你的服务器生成(你甚至可以将它生成为JS文件,而不是内联到html文件中.)然后,您的应用加载此模块,因此可以访问`appRoot`. (7认同)

Ram*_*ony 6

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

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

其中,MainCtrl是一个控制器.我依赖于Controller函数的参数名称做一对一的模拟实例,这让我感到很不舒服,因为我担心我可能会更改名称和搞砸.我更喜欢为此目的明确使用$ inject.