2014-10-15 2 views
3

Одним из моих партикулов является отчет - статический список имен и дат, предназначенный только для просмотра и печати.Обновление созданного сервером шаблона в AngularJS

Поскольку более эффективно отображать серверный отчет, мой API отправляет обратно HTML для запроса отчета вместо JSON. URL шаблон в маршруте отчета является то, что API вызова:

.when('/report', { 
    templateUrl: 'api/report', 
}); 

В докладе показано, в нужный URL, но когда я иду на другой маршрут и изменить данные, отчет не перезагружается. Я попытался установить заголовок no-cache в ответе API, но это не повлияло.

Есть ли лучшая практика для форсинга Angular для обновления определенных шаблонов?

+2

У углового есть внутренний кэш для шаблонов, поэтому он даже не пытается извлечь из сервера. Однако вы можете удалить элемент из кеша. Я считаю, что вы можете использовать службу $ templateCache' и удалять отдельные шаблоны. Вы можете удалить его после загрузки этого вида, поэтому убедитесь, что в следующий раз, когда он не кэширован – Ian

+2

@Ian, это работает! '$ templateCache.remove ('templateName');' в контроллере удаляет данный шаблон, чтобы он перезагружался при каждом посещении маршрута. Если вы включите это в ответ, я был бы рад принять и поддержать. –

ответ

3

Угловой имеет внутренний кэш для шаблонов, обслуживаемых службой $templateCache. После того, как шаблон загружен с сервера, его ссылка и содержимое кэшируются внутри Angular и используются вместо повторного запроса его с сервера.

Служба поддержки $templateCache имеет 2 соответствующих способа для вашей ситуации - .remove("templateUrl") и .removeAll(). В ситуации, когда вы хотите удалить конкретный шаблон, вы, очевидно, можете использовать метод .remove(templateUrl).

Это может быть сделано либо в контроллере (который при загрузке уже загрузил шаблон), либо в более общем случае, таком как глобальное событие $routeChangeSuccess. Например:

module.run(["$templateCache", function ($templateCache) { 
    $rootScope.$on("$routeChangeSuccess", function (event, current, previous) { 
     $templateCache.remove(current.$$route.templateUrl); 
    }); 
}]); 

Хотя это будет ясно определенный элемент в угловом кэш, вы должны убедиться, что ваш сервер устанавливает соответствующие заголовки на ответ шаблона, так что, когда она запрашивается с сервера, браузер не кэширует его.

В другом случае, если вы никогда не хотели никакого шаблона для кэширования в Угловом, вы можете связать глобальное $includeContentLoaded и $routeChangeStart события и вызвать $templateCache.removeAll(), чтобы убедиться, что шаблоны не когда-либо в кэше.

Смежные вопросы