Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.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 angularjs在不同文件中为同一模块定义服务_Javascript_Angularjs_Service_Dependency Injection_Factory - Fatal编程技术网

Javascript angularjs在不同文件中为同一模块定义服务

Javascript angularjs在不同文件中为同一模块定义服务,javascript,angularjs,service,dependency-injection,factory,Javascript,Angularjs,Service,Dependency Injection,Factory,我有两个文件,其中我在angular应用程序中定义了服务,但当我尝试在指令中同时使用它们时,我得到一个错误,即对于我第二个定义的指令,找不到服务提供商。似乎一个服务正在覆盖另一个。如果我将service2.js中的模块定义更改为myapp.services2,那么它可以工作。我想我可以通过这种方式将多个工厂添加到同一个模块中。有人能指出我做错了什么吗 service1.js: var services = angular.module('myapp.services',[]); services

我有两个文件,其中我在angular应用程序中定义了服务,但当我尝试在指令中同时使用它们时,我得到一个错误,即对于我第二个定义的指令,找不到服务提供商。似乎一个服务正在覆盖另一个。如果我将service2.js中的模块定义更改为myapp.services2,那么它可以工作。我想我可以通过这种方式将多个工厂添加到同一个模块中。有人能指出我做错了什么吗

service1.js:

var services = angular.module('myapp.services',[]);
services.factory('Service1', function() {
    // service code
});
service2.js:

var services = angular.module('myapp.services',[]);
services.factory('Service2', function() {
    // service code
});
mydirective.js:

angular.module('myappdirective', []).directive('myapp', ['Service1', 'Service2',
function(service1,service2) {
    // directive code
}]);

这是来自文档:

请注意,使用angular.module('myModule',[])将创建模块myModule并覆盖任何名为myModule的现有模块。使用angular.module('myModule')检索现有模块

可在此处找到:

这是可能的,但是容易出错,因此不建议这样做

对你已经在做的事情做一些小的修改


只要不要在除service1.js之外的其他文件中重新声明模块变量,或者将模块定义放在自己的文件中,并按照module.js、services.js、directive.js的顺序包含这些js文件,那么它就会工作

您将定义服务模块两次。您只需要定义一次(在一个文件中)。在我最近的一个项目中,我将var services=angular.module行移到了它自己的js文件中(肯定是多余的)。这不应该第二次查找它,而不是重新定义它吗?如果删除注入数组,我认为它会这样工作-angular.module('myapp.services');我会试试的,但为什么会有效果(这里是新来的)哈!这就是他们建造它的方式。这来自文档:注意使用angular.module('myModule',[])将创建模块myModule并覆盖任何名为myModule的现有模块。使用angular.module('myModule')检索现有模块。有趣的是,现有的实现让几乎所有人都感到困惑<代码>angular.createModule(,),angular.retrieveModule()不会引起这么多问题!;)另外,错误地添加
[]
是很难检测到的,我认为这很明显。我习惯于使用JQuery,所以像
.width()
.width(newWidth)
这样的东西对我来说都是很平常的。此外,这只会让你惊讶一次。下次当您看到喷油器错误告诉您找不到模块时,您将知道您又找到了;)