【问题标题】:angularjs defining services for the same module in different filesangularjs在不同文件中为同一个模块定义服务
【发布时间】:2014-06-16 04:31:40
【问题描述】:

我有两个文件,我在我的 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
}]);

【问题讨论】:

  • 您定义了服务模块两次。您只需定义一次(在一个文件中)。在我最近的项目中,我将 var services = angular.module 行移到了它自己的 js 文件中(肯定过分了)。
  • 那不应该是第二次查找而不重新定义吗?
  • 如果你删除注入数组,我认为它会这样工作 - angular.module('myapp.services');
  • 我会试试看,但为什么会这样(这里是 Angular 的新手)
  • 哈!这只是他们建造它的方式。这来自文档:请注意,使用 angular.module('myModule', []) 将创建模块 myModule 并覆盖任何名为 myModule 的现有模块。使用 angular.module('myModule') 检索现有模块。

标签: javascript angularjs service dependency-injection factory


【解决方案1】:

这是可能的,但容易出错,因此不推荐

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

只是不要在service1.js以外的其他文件中重新声明module变量或将模块定义放到自己的文件中,并按照Module.js、services.js、指令的顺序包含这些JS文件。 js 就可以了

【讨论】:

    【解决方案2】:

    这是来自文档:

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

    在这里找到: https://docs.angularjs.org/guide/module

    【讨论】:

    • 有趣的是,现有的实现几乎让每个人都感到困惑。 angular.createModule(<module_name>, <dependencies>), angular.retrieveModule(<module_name>) 不会提出这么多问题! ;) 错误地添加[] 也很难检测到
    • 我认为这很明显。我习惯于使用 JQuery,所以像 .width().width(newWidth) 这样的事情非常简单,至少对我来说是这样。此外,它只会让你吃惊一次。下次你看到注入器错误告诉你找不到模块时,你会知道你又做了一次;)
    猜你喜欢
    • 1970-01-01
    • 2018-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多