自定义图像服务与本机Image元素构造函数

时间:2016-04-25 18:11:11

标签: javascript angularjs image dependency-injection

我正在使用名为 Image 的自定义Angular服务。我现在意识到这是一个可怕的名字来呼叫一个人的服务,因为它与Javascript's native Image element constructor冲突也称为图像

因此,当尝试同时使用此自定义Image服务和本机javascript Image元素构造函数时,我遇到了问题......

不幸的是,在我开发这个项目的时间之前,这个服务名称已经很久了。此外,由于依赖于从图像服务名称中获取功能的应用程序存在大量且广泛的依赖性,因此将此Image服务重命名为其他内容并非真正的选项。

有解决这场冲突的好方法吗?

我找到了一个解决依赖注入期间重命名自定义Image服务的工作:

angular.module('app').directive('imageModificationModal', [
  'Image',
  function(MyImage) {
    ...

但这似乎是非常糟糕的做法,加上可能导致调试头痛。

1 个答案:

答案 0 :(得分:1)

最不引人注目的方式是使用$injector而不是注释注入它:

var ImageService = $injector.get('Image');

为避免名称冲突,可以定义服务同义词,以便在应该同时使用本机ImageImage服务的地方使用。

app.config((ImageProvider, $provide) => {
  $provide.provider('ImageService', ImageProvider);
});

和/或本地Image构造函数可以用不同的名称注入:

app.constant('NativeImageElementConstructorWhatever', Image);