Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/402.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 为什么两个不同的模块在作为依赖添加到第三个模块时可以相互访问?_Javascript_Angularjs_Module_Mean - Fatal编程技术网

Javascript 为什么两个不同的模块在作为依赖添加到第三个模块时可以相互访问?

Javascript 为什么两个不同的模块在作为依赖添加到第三个模块时可以相互访问?,javascript,angularjs,module,mean,Javascript,Angularjs,Module,Mean,我的AngularJS应用程序中有3个模块,例如main、home和产品main模块具有home和product模块作为依赖项(ng.module('main',['home',['product'])),而home和product模块没有任何依赖项(ng.module('product',[])ng.module('phome',[])),仍然产品模块可以访问主页模块服务吗?为什么 下面是我的应用程序的示例代码,它具有相同的场景和相同的问题。这是我的 {{mainController.nam

我的AngularJS应用程序中有3个模块,例如
main
home
产品
main
模块具有
home
product
模块作为依赖项(
ng.module('main',['home',['product'])
),而
home
product
模块没有任何依赖项(
ng.module('product',[])
ng.module('phome',[])
),仍然
产品
模块可以访问
主页
模块服务吗?为什么

下面是我的应用程序的示例代码,它具有相同的场景和相同的问题。这是我的


{{mainController.name}
(功能(ng){
var homeModule=ng.module('home',[]);
homeModule.service(“HomeService”,[功能(){
var homeService=this;
homeService.getName=函数(){
返回“家庭服务”;
}
}]);
var productModule=ng.module('product',[]);
productModule.service(“ProductService”、[“HomeService”、函数(HomeService){
var productService=this;
productService.getName=函数(){
返回“产品服务-”+HomeService.getName();
};
}]);
var mainModule=ng.module('main',['home','product']);
mainModule.controller(“MainController”、['ProductService',函数(ProductService){
var mainController=this;
mainController.name=ProductService.getName();
}]);
})(角度);

答案很简单。Angular不会将模块的内容限定到模块本身。我在某个地方读到过关于添加此功能的讨论,但我还没有看到它的实现

更糟糕的是,应用于一个导入模块的控制器在应用程序中是唯一的。例如,我曾经使用angular ui引导,我的团队中有人添加了一个
AlertController
。当控制器从未被击中时,我们非常困惑,但这是因为AngularUI已经定义了控制器

所以这不仅仅是一个可见性的问题,也是一个可维护性和命名的问题


模块上定义的所有内容都是公共的。

之所以有效,是因为
home
模块的依赖项被添加到
main
模块中,而
main
只调用
产品服务
,因此它应该只依赖
产品
模块

如果从
main
模块中删除
home
模块依赖项(应该是这种情况),它将停止工作

TLDR;不将
主页
依赖项添加到
产品
模块的缺点是,仅添加产品依赖项不起作用,但您必须添加
主页
依赖项才能使用
产品服务


这是因为家庭服务被定义为一个全局变量,可以从应用程序中的任何位置访问。尝试阅读更多信息。这太可怕了。幸运的是,经过1.5年的努力,我还没有遇到这个问题。我似乎还记得这个问题的
NameCtrl
标准,以避免与第三方库的
NameController
冲突。事实上,它已经击中了我的团队三四次,直到我们按照
NameCtrl
惯例声明。
<!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>