Я работаю с пользовательской функцией Angular с именем Image. Теперь я понимаю, что это ужасное имя для вызова одной службы, потому что она конфликтует с конструктором элемента изображения Javascript, также называемым Image.
Поэтому, пытаясь использовать как эту настраиваемую службу изображений, так и собственный конструктор элементов JavaScript javascript, я сталкиваюсь с проблемами...
К сожалению, это имя службы было установлено в камне задолго до моего развития в этом проекте. Кроме того, переименование этой службы изображений на что-то еще не является вариантом из-за обширных и широко распространенных зависимостей через приложение, которое полагается на получение функциональности от имени службы Image.
Есть ли хороший способ обойти этот конфликт?
Я нашел работу вокруг, где я переименовал пользовательский сервис Image во время инъекции зависимостей:
angular.module('app').directive('imageModificationModal', [
'Image',
function(MyImage) {
...
Но это похоже на действительно плохую практику, плюс может вызвать отладочную головную боль.
Наиболее ненавязчивым способом является $injector
вместо $injector
вместо аннотации:
var ImageService = $injector.get('Image');
Чтобы избежать конфликтов имен, синоним службы может быть определен для использования в тех местах, где предполагается, что использование службы Image
и Image
будет использоваться одновременно.
app.config((ImageProvider, $provide) => {
$provide.provider('ImageService', ImageProvider);
});
И/или встроенный конструктор Image
может быть введен другим именем:
app.constant('NativeImageElementConstructorWhatever', Image);