【问题标题】:How can I create an angular service for use in different modules?如何创建用于不同模块的角度服务?
【发布时间】:2015-08-03 15:40:23
【问题描述】:

我在 creating services 的 Angular 文档中看到,服务是通过在模块上定义工厂来创建的。

但是,我需要定义一个通用服务以供跨多个模块使用。 我在文档中没有看到任何内容。可以做到吗?或者有什么方法可以从创建它的模块以外的模块访问服务?

【问题讨论】:

    标签: angularjs


    【解决方案1】:

    请查看工作演示:JSFiddle

    在一些通用模块中定义服务,例如:

    angular.module('mySharedModule', [])
         .service('mySharedService',...
    

    然后在其他模块中,使用

    angular.module('myModule', ['mySharedModule'])
        .controller('mySharedService', function (mySharedService) {
        ...
    

    然后您可以在模块myModule 中使用mySharedService。你的服务现在可以注入它了。

    【讨论】:

    • 当您说 .service 时,您是指 .factory 吗?
    • 哦,servicefactory 都是 providers。从某种意义上说,它们是为了同一个目的。请查看stackoverflow.com/questions/15666048/…
    • 这似乎不起作用。我在一个 JS 文件中有模块 angular.module("treeApp") .controller("treeCtrl", function($scope, ... 然后在另一个 JS 中,我在该模块上定义了一个名为 Tags 的工厂服务(共享服务)使用 angular.module("treeApp").factory("Tags", function($http) ... 最后我有一个名为 exportApp 的新模块我想引用标签。我将它定义为 angular.module("exportApp" , ["treeApp"]).controller("exportCtrl", ["Tags", function(Tags){}]。但是我遇到了未捕获的错误
    • 你的小提琴按原样工作,但是当我用工厂替换服务时它没有。我的被​​定义为工厂。有没有办法让它与工厂一起工作?
    • jsfiddle.net/vu7has2h/2。只是语法差异。我认为您可以先尝试一些服务/工厂的示例。
    【解决方案2】:

    服务必须属于一个模块。但是,要在其他模块中使用它,只需将拥有的模块包含在您想要使用它的模块中。示例:

    angular.module('common', [])
        .factory('yourService', ...);
    
    angular.module('yourModule', ['common'])
        .controller('yourController', ['yourService', function(yourService) {
           // common service available here.
        }]);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-15
      • 1970-01-01
      • 2018-05-30
      相关资源
      最近更新 更多