如何使用不同模块中具有相同名称的两个AngularJS服务?

时间:2013-07-25 15:23:01

标签: angularjs angularjs-service angularjs-module

假设我有两个AngularJS模块,例如: foobar,它们都定义了一个名为baz的服务。

在我的申请中,我依靠他们说:

var app = angular.module('app', [ 'foo', 'bar' ]);

然后我可以尝试使用

在控制器中使用baz服务
app.controller('blaController', [ '$scope', 'baz', function($scope, baz) {
  // ...
}]);

如何定义我想使用哪两项服务?是否有诸如完全合格的名字之类的东西?

2 个答案:

答案 0 :(得分:38)

服务定位器按名称查找服务(angularjs guide DI)。但是"Namespacing" services in AngularJS

  

截至今天,AngularJS不处理服务的命名空间冲突   所以如果你有两个不同的模块,服务命名相同   方式,你在你的应用程序中包含两个模块,只有一个服务   可用。

我猜您可以“手动”创建完全限定名称:将服务命名为foo.bazbar.baz,而不是普通baz。这是一种自欺欺人。此外,以这种方式编写它并不会使命名空间成为现实,但另一个读取代码的人可能会这么认为。

答案 1 :(得分:0)

当我们有两个具有相同名称的服务时,您必须在本地模块中使用它们时加以区分。让我们看下面的代码以了解其工作原理

我有两个Util服务,需要区分它们,

angular
  .module('module1', [
  ])
  .service('UtilService', UtilService)
  .service('another.UtilService', UtilService)
  .name;

在控制器文件中,您可以像下面那样简单地注入。

export class Controller {
  public static $inject: string[] = ['UtilService', 'another.UtilService'];

constructor(
    private utilService: UtilService,
    private anotherUtilService
  ) {
     console.log(this.utilService) // will print the main util service methods
     console.log(this.anotherUtilService) // will print the another util service 
     methods
  }