自定义$ templateCache加载程序

时间:2014-05-05 11:27:30

标签: angularjs

这是关于$templateCache中的模板加载自定义的问题。

目标是处理传输层,确切地说:

  1. 能够修改模板网址。
  2. 能够处理传输错误和超时。
  3. 如何使用自定义传输包装器修改$templateCache加载程序?

    最好在全球应用程序级别,即指令应该不知道这种修改。

1 个答案:

答案 0 :(得分:1)

您可以使用$http interceptor。您可以使用request拦截器来更改URL,使用responseError拦截器来处理错误。下面是一个简单的实现,您必须更改为您希望如何修改URL以及如何处理错误。

app.factory('TemplateInterceptor', function($injector, $window, $q, $timeout) {
  return {
   'request': function(config) {
     // Test if is a template
     var isTemplate = config.url.match(new $window.RegExp("^/?templates/"));

     // Save in config, so responseError interceptor knows
     config.TemplateInterceptor = config.TemplateInterceptor || {};
     config.TemplateInterceptor.isTemplate = isTemplate;

     if (isTemplate) {
       config.url = '/modified-url' + config.url;
     }
     return config;
   },
   'responseError': function(rejection) {
      // Avoid circular dependency issues
      var $http = $injector.get('$http');

      // If a template, then auto-retry after 1 second
      return !rejection.config.TemplateInterceptor.isTemplate 
        ? $q.reject(rejection) 
        : $timeout(angular.noop, 1000).then(function() {
        return $http(rejection.config);
      });
    }
  }
});

注册为:

app.config(function($httpProvider) {
  $httpProvider.interceptors.push('TemplateInterceptor');
});