Конфликт между пользовательским сервисом Image и собственным конструктором элемента Image

0

Я работаю с пользовательской функцией Angular с именем Image. Теперь я понимаю, что это ужасное имя для вызова одной службы, потому что она конфликтует с конструктором элемента изображения Javascript, также называемым Image.

Поэтому, пытаясь использовать как эту настраиваемую службу изображений, так и собственный конструктор элементов JavaScript javascript, я сталкиваюсь с проблемами...

К сожалению, это имя службы было установлено в камне задолго до моего развития в этом проекте. Кроме того, переименование этой службы изображений на что-то еще не является вариантом из-за обширных и широко распространенных зависимостей через приложение, которое полагается на получение функциональности от имени службы Image.

Есть ли хороший способ обойти этот конфликт?

Я нашел работу вокруг, где я переименовал пользовательский сервис Image во время инъекции зависимостей:

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

Но это похоже на действительно плохую практику, плюс может вызвать отладочную головную боль.

Теги:
dependency-injection
image

1 ответ

1
Лучший ответ

Наиболее ненавязчивым способом является $injector вместо $injector вместо аннотации:

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

Чтобы избежать конфликтов имен, синоним службы может быть определен для использования в тех местах, где предполагается, что использование службы Image и Image будет использоваться одновременно.

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

И/или встроенный конструктор Image может быть введен другим именем:

app.constant('NativeImageElementConstructorWhatever', Image);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню