【问题标题】:Override $templateCache to be case insensitive覆盖 $templateCache 使其不区分大小写
【发布时间】:2016-10-30 22:53:42
【问题描述】:

是否可以覆盖$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); };

但不那么老套,更像 DI 风格?

【问题讨论】:

    标签: javascript angularjs angular-templatecache angularjs-decorator


    【解决方案1】:

    我会说使用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;
        }]);
    }
    

    【讨论】:

    • @OndrejSvejdar 我的错,已更正,感谢您的提醒。好吧,我可以知道你具体不明白的地方吗?
    • 我不确定如何/在哪里/触发它 - 所以 $provide 就是我所追求的:)。
    • @OndrejSvejdar 结帐更新的答案。如果您仍然不清楚发生了什么,请告诉我。
    • 我必须将 $delegate[0] 替换为 $delegate 才能使其正常工作。
    • 我不得不将$provide.decorator('$templateCacheProvider', 替换为$provide.decorator('$templateCache,。并且还使用niaher的修复。非常感谢。
    【解决方案2】:

    试试下面的代码,对我来说效果很好。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-08
      • 2012-12-01
      • 2013-03-06
      • 2020-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多