为什么两个不同的模块可以相互访问时,添加依赖于第三个模块
Why 2 different Module can access each other when added as depend to third module?
我在我的AngularJS App中有3个模块,例如main
, home
和product
。main
模块具有home
和product
模块作为依赖关系(ng.module('main', ['home', 'product'])
),而home
和product
模块没有任何依赖关系(ng.module('product', [])
ng.module('phome', [])
),仍然product
模块可以访问home
模块服务?为什么? ?
下面是我的应用程序的示例代码,它具有相同的场景和相同的问题。这是JSfiddle Link。
<!DOCTYPE html>
<html ng-app="main">
<body ng-controller="MainController as mainController">
{{mainController.name}}
<script type="application/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.min.js"></script>
<script>
(function (ng) {
var homeModule = ng.module('home', []);
homeModule.service("HomeService", [function () {
var homeService = this;
homeService.getName = function () {
return "Home Service";
}
}]);
var productModule = ng.module('product', []);
productModule.service("ProductService", ["HomeService", function (HomeService) {
var productService = this;
productService.getName = function () {
return "Product Service - " + HomeService.getName();
};
}]);
var mainModule = ng.module('main', ['home', 'product']);
mainModule.controller("MainController", ['ProductService', function (ProductService) {
var mainController = this;
mainController.name = ProductService.getName();
}]);
})(angular);
</script>
</body>
</html>
答案很简单。Angular不会把模块的内容作用域限定在模块本身。我在某个地方读到有关于添加此功能的讨论,但我还没有看到它实现。
更糟糕的是,应用于一个导入模块的控制器在你的应用中是唯一的。例如,我曾经使用angular-ui bootstrap,我的团队中有人添加了一个AlertController
。当控制器从未被击中时,我们很困惑,但这是因为angular-ui已经定义了控制器。
所以这不仅仅是可见性的问题,也是可维护性和命名的问题。
它工作是因为home
模块的依赖关系被添加到main
模块,而main
只调用product service
,因此它应该只依赖于product
模块。
如果你从main
模块中移除home
模块依赖(应该是这样),它会停止工作。
TLDR ;不将home
依赖项添加到product
模块的缺点是,仅添加产品依赖项将无法工作,但您必须添加home
依赖项才能与product service
一起工作。
jsfiddle
- Javascript,访问一个主要对象模块模式中的每个对象
- 从模块内部访问Express装载路径
- 文件结构:使用索引.js文件级联访问子模块或子文件
- 如何访问npm模块抛出的自定义错误对象[error:[object object]]
- 访问模块.从外部文件导出
- JavaScript:访问继承子模块中的“封闭”变量
- j查询模块模式未命名 |如何访问“$”
- 从另一个模块访问作用域的指令
- 从带有木偶的子模块访问父模块的最佳方式
- 如何从解析模块访问全局变量
- 从Browserify模块访问DOM时出现问题
- 如何从子模块访问父方法
- 直接从Angular模块访问常量
- 揭示模块模式:在哪里为模块访问插入变量
- 如何从requirejs模块访问全局变量
- 从diff模块访问模块数据
- 未捕获的ReferenceError: $是未定义的错误,通过Node模块访问
- kendo要求从另一个模块访问视图模型
- 如何使用 node.js 将 JSON 对象从一个模块访问到另一个模块
- node.js:从另一个模块访问本地变量