无法访问 $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
来源文件: < a href = “ http://code.angularjs.org/angle-1.0.0rc7.js”rel = “ norefrer”> http://code.angularjs.org/angular-1.0.0rc7.js
电话: 2491

卧槽?

115816 次浏览

您不能在配置阶段请求实例-您只能请求提供程序。

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 函数的参数名对实例进行一对一的模拟会让我感到不舒服,因为我担心我可能会更改名称并把事情搞砸。我更喜欢为此目的显式地使用 $register。

不要暗示你使用的语法就像你做的。AngularJs 允许您拥有不同的功能(runconfigservicefactory等等)这个功能你甚至不需要自己注射

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

你可以利用它,你知道的。