无法到达$ 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
源文件: http : //code.angularjs.org/angular-1.0.0rc7.js
线路:2491
WTF?
您不能在configuration阶段要求实例 – 您只能询问提供者。
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函数的参数名称来做一对一的模拟实例,我感到不自在,因为担心我可能会改变名称并将其弄糟。 我更喜欢明确使用$注入这个目的。
我不build议你像你那样使用语法。 AngularJs让你有自己想要的不同function( run
, config
, service
, factory
等),这是更专业。在这个function,你甚至不需要自己注入
MainCtrl.$inject = ['$scope', '$rootScope', '$location', 'socket', ...];
你可以使用它,如你所知。