在维护对原始提供程序的引用的同时,是否可以覆盖$templateCache
等核心提供程序?
我想覆盖$templateCache
不区分大小写。
即。
之类的东西var normalGet = $templateCache.get;
var normalPut = $templateCache.put;
$templateCache.get = function(key) { normalGet(key.toLowerCase()); };
$templateCache.put = function(key,value) { normalPut(key.toLowerCase(), value); };
但是更少的hacky,更多DI风格?
答案 0 :(得分:3)
我说使用decorator
来修改实际的Provider
代码,这些代码将在配置阶段完成,然后再付诸行动。
我们使用了$templateCacheProvider
,因为附加前缀Provider
表示其provider
(当您修改指令DDO时,它可以是Directive
)。您必须将此代码放在应用程序的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;
}]);
}
答案 1 :(得分:0)
尝试下面的代码,对我来说效果很好。
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;
}]);
}]);