28

假设我有两个 AngularJS 模块,例如foobar,并且它们都定义了一个名为baz.

在我的应用程序中,我依靠他们说:

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

然后我可以尝试通过使用baz在控制器中使用该服务

app.controller('blaController', [ '$scope', 'baz', function($scope, baz) {
  // ...
}]);

如何定义我想使用两种服务中的哪一种?是否有诸如完全限定名称之类的东西?

4

2 回答 2

39

服务定位器按名称查找服务(angularjs guide DI)。但是AngularJS 中的“命名空间”服务

到今天为止,AngularJS 不处理服务的命名空间冲突,所以如果你有 2 个不同的模块,服务的命名方式相同,并且你在应用程序中包含这两个模块,那么只有一个服务可用。

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

于 2013-07-25T16:36:17.157 回答
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
  }
于 2019-06-04T08:12:50.943 回答