Angular — украсить службу, чтобы получить несколько экземпляров

#javascript #angularjs

#javascript #angularjs

Вопрос:

У меня есть eventService , который будет использоваться в нескольких модулях под одним ngApp . Он имеет стандартное использование:

 eventService.on('eventName');
  

Дело в том, что я хочу украсить on функцию, чтобы добавить к eventName ней некоторый идентификатор, уникальный для модуля, который ее использует.

Я думал об использовании декоратора внутри фазы конфигурации каждого модуля, например:

 // App
var myApp = angular.module('myApp', ['eventServiceModule']);
myApp.config(function($provide, eventServiceProvider) {
    $provide.decorator('eventService', eventServiceProvider.decorateWithId(20));
});

// Decorator function (inside eventService)
decorateWithId: (moduleId) => {
    return ['$delegate',function ($delegate) {
           const originalOn = $delegate.on;
           const newEventing = {};

           newEventing.on = function(event) {
                arguments[0] = `${moduleId}_`   event;
                originalOn.apply($delegate, arguments);
           };

           return Object.assign(newEventing, $delegate);
        }
    ];
}
  

Но, по-видимому, каждый декоратор получает новый объект декоратора вместо нового объекта с уникальным идентификатором, как я надеялся.

Есть ли способ исправить это или новый подход для достижения этой цели?