Подтвердить что ты не робот

Как использовать две службы AngularJS с одинаковым именем из разных модулей?

Предположим, у меня есть два модуля для AngularJS, например. foo и bar, и оба они определяют службу под названием baz.

В моем приложении я полагаюсь на них, говоря:

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

Затем я могу попытаться использовать службу baz в контроллере, используя

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

Как я могу определить, какую из двух служб я бы хотел использовать? Есть ли что-то такое, как полное имя?

4b9b3361

Ответ 1

Сервисный локатор ищет сервисы по имени (angularjs guide DI). Однако "Пространство имен" в AngularJS:

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

Я предполагаю, что вы можете сделать полное имя "от руки": назовите сервис foo.baz и bar.baz вместо простого baz. Это своего рода самообман. Более того, его написание не делает пространство имен реальным, но другой человек, который читает код, может подумать так.

Ответ 2

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

У меня есть две службы 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
  }