Javascript 为什么Angular(1.x)允许模块';是否依赖于引用其组件?
考虑以下代码:Javascript 为什么Angular(1.x)允许模块';是否依赖于引用其组件?,javascript,angularjs,Javascript,Angularjs,考虑以下代码: angular.module('app',['app.core'])) .factory('NameService',function()){ 返回{ getName:function(){return'Omar';} }; }); 角度模块('app.core',[]) .controller('MainController',函数($scope,NameService){ $scope.name=NameService.getName(); }); {{name}} 这是
angular.module('app',['app.core']))
.factory('NameService',function()){
返回{
getName:function(){return'Omar';}
};
});
角度模块('app.core',[])
.controller('MainController',函数($scope,NameService){
$scope.name=NameService.getName();
});代码>
{{name}}
这是Angular 1.x中的一个设计缺陷。它之所以有效,是因为Angular保留了所有服务、控制器、工厂、指令等的全局注册表。“安装”模块意味着将其所有内容放入全局注册表,并将其名称用作字符串键。因此,如果一个模块不注册它的依赖项,它仍然可以工作,就像其他模块一样
这实际上是大型角度应用程序中非常常见的错误源,因为您可能会在不知情的情况下使用未声明的依赖项,因此重新组织应用程序的模块结构将以不明显的方式破坏这些错误
在这方面更好。基本上,每个角度应用程序都有一个。注册依赖项时,它的签名将添加到$injector.modules
数组中。调用特定依赖项时,将从数组中检索其签名。$injector
不会根据注册的来源限制对模块
阵列的访问;任何已注册的依赖项在应用程序中的任何位置都可用