如何使用来自不同模块的两个同名AngularJS服务?
假设我有两个AngularJS模块,例如如何使用来自不同模块的两个同名AngularJS服务?,angularjs,angularjs-service,angularjs-module,Angularjs,Angularjs Service,Angularjs Module,假设我有两个AngularJS模块,例如foo和bar,它们都定义了一个名为baz的服务 在我的申请中,我依靠他们说: var app = angular.module('app', [ 'foo', 'bar' ]); 然后,我可以尝试在控制器中使用baz服务,方法是使用 app.controller('blaController', [ '$scope', 'baz', function($scope, baz) { // ... }]); 如何定义我要使用的两个服务中的哪一个?是否
foo
和bar
,它们都定义了一个名为baz
的服务
在我的申请中,我依靠他们说:
var app = angular.module('app', [ 'foo', 'bar' ]);
然后,我可以尝试在控制器中使用baz
服务,方法是使用
app.controller('blaController', [ '$scope', 'baz', function($scope, baz) {
// ...
}]);
如何定义我要使用的两个服务中的哪一个?是否存在诸如完全限定名之类的内容?服务定位器按名称()查找服务。然而: 到今天为止,AngularJS不处理服务的名称空间冲突 因此,如果您有两个不同的模块,其服务名称相同 如果您在应用程序中同时包含这两个模块,则将只提供一项服务 可用
我想您可以“手工”命名完全限定的名称:将服务命名为
foo.baz
和bar.baz
,而不是普通的baz
。这是一种自我错觉。此外,以这种方式编写并不能实现名称空间,但另一个阅读代码的人可能会这样认为。当我们有两个同名的服务时,您必须在本地模块中使用它来区分它们。让我们看看下面的一些代码来了解它是如何工作的
我有两个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
}
可能重复的可能重复的可能重复的我忘了提到,您可以通过闭包
(function(){module declaration}())来缓解这一问题代码>