这是关于$templateCache
中的模板加载自定义的问题。
目标是处理传输层,确切地说:
如何使用自定义传输包装器修改$templateCache
加载程序?
最好在全球应用程序级别,即指令应该不知道这种修改。
答案 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');
});