Переопределите $templateCache, чтобы не учитывать регистр

Можно ли переопределить основной провайдер, например $templateCache сохраняя ссылку на первоначального поставщика? Я хотел бы переопределить $templateCache быть нечувствительным к регистру.

IE что-то вроде

var normalGet = $templateCache.get;
var normalPut = $templateCache.put;
$templateCache.get = function(key) { normalGet(key.toLowerCase()); };
$templateCache.put = function(key,value) { normalPut(key.toLowerCase(), value); };

Но менее хакерский, в стиле DI?

1 ответ

Решение

Я бы сказал, использовать decorator изменить фактический Provider код, который будет сделан на этапе настройки перед вводом в действие.

Мы использовали $templateCacheProvider так как Provider добавленный префикс указывает, что его provider(может быть Directive когда вы изменяете директиву DDO директивы). Вы должны разместить этот код внутри config фаза вашего заявления.

Код

app.config(['$provide', Decorate]);
function Decorate($provide) {
  $provide.decorator('$templateCacheProvider', 
    ['$delegate', function($delegate) {
      var templateCache = $delegate[0];

      var normalGet = templateCache.get;
      var normalPut = templateCache.put;
      templateCache.get = function(key) { return normalGet(key.toLowerCase()); };
      templateCache.put = function(key,value) { normalPut(key.toLowerCase(), value); };

      return $delegate;
    }]);
}

Попробуйте код ниже, отлично сработал для меня.

angular.module('utils').config(['$provide', ($provide) => {
    $provide.decorator('$templateCache',
        ['$delegate', ($delegate: ITemplateCacheService) => {
            let templateCache = $delegate;
            let caseSenstiveGet = templateCache.get;
            let caseSenstivePut = templateCache.put;
            templateCache.get = (key) => { return caseSenstiveGet(key.toLowerCase()); };
            templateCache.put = (key, value) => { return caseSenstivePut(key.toLowerCase(), value); };
            return $delegate;
        }]);
}]);
Другие вопросы по тегам