Ответ 1
Я столкнулся с этой проблемой. Мы добавляли строки запросов ко всем нашим вызовам $http с перехватчиком. Это закончилось тем, что нарушало наши шаблоны, потому что при поиске в $templateCache имя шаблона с строкой запроса не было найдено (шаблон был первоначально кэширован с использованием только его id).
Angular $httpProvider перехватчики перехватывают вызовы модуля $http. Эти $http-вызовы не обязательно являются реальными HTTP-запросами GET/POST, они также могут быть вызовами для получения шаблонов в $templateCache. Кажется, что когда ссылается встроенный шаблон, сначала используется $http-модуль (который сначала запускает перехватчик), а затем модуль $http будет выглядеть в $templateCache, чтобы узнать, уже ли кэширован шаблон. Если $http узнает, что элемент существует в $templateCache, он вернет его, если он не попытается сделать фактический HTTP-запрос для получения шаблона.
Наше решение состояло в том, чтобы включить модуль $templateCache в наш перехватчик и сначала проверить вручную, если HTTP-запрос существует в $templateCache. Если запрос не находится в $templateCache, добавьте нашу строку запроса, если она находится в $templateCache, а затем просто вернет ее.
$httpProvider.interceptors.push(function($templateCache) {
return {
'request' : function(request) {
// If the request is a get and the request url is not in $templateCache
if(request.method === 'GET' && $templateCache.get(request.url) === undefined) {
// Item is not in $templateCache so add our query string
request.url = request.url + '?time=' + new Date().getTime();
}
return request;
}
};
});