162

以下文件“有效”(即它不会引发任何错误):

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

怎么回事?

4

3 回答 3

307

例如,您不能在配置阶段询问 - 您只能询问提供者。

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

于 2012-05-07T21:50:47.693 回答
7

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

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

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

于 2013-05-08T20:51:42.377 回答
1

不建议您像以前那样使用语法。AngularJs 让您可以根据需要拥有不同的功能(、、、、runconfigservicefactory更专业。在这个功能中,您甚至不必像自己一样注入

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

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

于 2016-04-27T21:32:04.983 回答