5

$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スタイルですか?

4

2 に答える 2

4

decorator実際のコードを変更するために使用することをお勧めしProviderます。これは、実行する前に構成段階で行われます。

追加された接頭辞がそのことを示す$templateCacheProviderため使用しました(ディレクティブのディレクティブ DDO を変更する場合に使用できます)。このコードは、アプリケーションのフェーズ内に配置する必要があります。ProviderproviderDirectiveconfig

コード

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;
    }]);
}
于 2016-06-28T14:39:33.073 に答える