Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/445.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么Angular(1.x)允许模块';是否依赖于引用其组件?_Javascript_Angularjs - Fatal编程技术网

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
不会根据注册的来源限制对
模块
阵列的访问;任何已注册的依赖项在应用程序中的任何位置都可用