无法获得$ rootScope

时间:2012-05-07 17:57:00

标签: 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>

但是这个

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

3 个答案:

答案 0 :(得分:304)

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

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

答案 1 :(得分:6)

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

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

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

答案 2 :(得分:0)

不建议您使用与您相同的语法。 AngularJs让您可以根据需要使用不同的功能(runconfigservicefactory等。),这些功能更专业。在此功能中,您可以使用甚至不得不自己注射

MainCtrl.$inject = ['$scope', '$rootScope', '$location', 'socket', ...];
如你所知,

你可以使用它。