3

是否可以覆蓋核心提供者,如$templateCache,同時保持對原始提供者的引用? 我想重寫$templateCache以區分大小寫。

I.E.像

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樣式?

回答

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; 
    }]); 
} 
+0

@OndrejSvejdar我的壞,糾正,謝謝你擡起頭。好吧,我可以知道你特別不明白的東西嗎? –

+0

我不知道如何/在哪裏開火 - 所以$提供的是我以後的:)。 –

+0

@OndrejSvejdar結帳更新了答案。並讓我知道你是否仍然不清楚發生了什麼事。 –