Блог

Javascript/AngularJS: кэширование шаблонов

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

Быстрый поиск в Интернете, чтобы отключить кэширование дает следующие обходные пути:

app.run(function($rootScope, $templateCache) {
   $rootScope.$on('$viewContentLoaded', function() {
      $templateCache.removeAll();
   });
});

Данный подход удаляет все созданные шаблоны из кэша при каждом обновлении ngView.

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

app.run(function($rootScope, $templateCache) {
    $rootScope.$on('$routeChangeStart', function(event, next, current) {
        if (typeof(current) == 'object' && 'unsetCache' in current && current.unsetCache == true){
            $templateCache.remove(current.templateUrl);
        }
    });
});