以下文件“有效”(感觉它不会引发任何错误):
<!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?
答案 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让您可以根据需要使用不同的功能(run
,config
,service
,factory
等。),这些功能更专业。在此功能中,您可以使用甚至不得不自己注射
MainCtrl.$inject = ['$scope', '$rootScope', '$location', 'socket', ...];
如你所知,你可以使用它。