覆盖 $templateCache 使其不区分大小写
Override $templateCache to be case insensitive
能否在保持对原始提供者的引用的同时覆盖 $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); };
但不那么笨拙,更像 DI 风格?
我会说使用 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;
}]);
}
试试下面的代码,对我来说效果很好。
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;
}]);
}]);
能否在保持对原始提供者的引用的同时覆盖 $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); };
但不那么笨拙,更像 DI 风格?
我会说使用 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;
}]);
}
试试下面的代码,对我来说效果很好。
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;
}]);
}]);