Переопределите $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;
}]);
}]);