Остановить AngularJS от кэширования html между маршрутами

У меня есть два маршрута на странице, подключенной к Angular JS.

одна страница имеет форму, из которой вы можете сохранить некоторую информацию, angular, похоже, не запрашивает html, когда я переключаюсь между маршрутами.

Я попытался сделать $httpProvider.по умолчанию.cache = false;

в основном для одного маршрута я не хочу, чтобы Angular кэшировал html, для других маршрутов это действительно хорошо.

код здесь:

angular.module('userAccount', ['ngRoute', 'ngAnimate'])
.config(['$routeProvider', '$locationProvider', '$httpProvider',
  function ($routeProvider, $locationProvider, $httpProvider) {
      //$httpProvider.defaults.cache = false;
      $locationProvider.hashPrefix('');
      $routeProvider
        .when('/UserProfile/:action', {
            reloadOnSearch: false,
            cache: false,
            templateUrl: function (params) {
                return '/UserProfile/' + params.action;
            },
            controller: 'UserProfCtrl'
        })
        .when('/UserDashboard/:action', {
            templateUrl: function (params) {
                return '/UserDashboard/' + params.action;
            },
            controller: 'UserDashCtrl'
        })
        .otherwise('/UserDashboard/Index');
  }])
.controller('MainCtrl', ['$scope', '$route', '$routeParams', '$location',
  function ($scope, $route, $routeParams, $location) {
      $scope.$on('$routeChangeStart', function (next, current) {

      });

      this.$route = $route;
      this.$location = $location;
      this.$routeParams = $routeParams;
  }])
.controller('UserProfCtrl', ['$routeParams', function ($routeParams) {
    this.name = "UserProfCtrl";
    this.params = $routeParams;
}])
.controller('UserDashCtrl', ['$routeParams', function ($routeParams) {
    this.name = "UserDashCtrl";
      this.params = $routeParams;
    }]);

обратите внимание, что я удалил здесь некоторый несвязанный код манипуляции ui.

3 ответов


у меня такая же проблема в моем гибридном мобильном приложении и решена путем добавления кэша: false в моем маршруте.js

$stateProvider.state('stateName', {
   cache: false,
   url : '/url',
   templateUrl : 'template.html'
})

надеюсь, что это решит вашу проблему.

вы можете попробовать добавить строку запроса с url

return '/views/' + params.action+'?'+$.now();

Я знаю его поздно, но это может помочь кому-то

Я просто использовал это перед моими маршрутами, и это сработало.

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

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

Если я нажал два раза подряд на ссылку продуктов, второй clic не перезагружает / оценивает содержимое, но если я нажал на другую ссылку, а затем нажмите на ссылку produtcs, angular перезагрузите содержимое этого.

            var app = angular.module("myApp", ["ngRoute"]);

            app.config(['$routeProvider', '$locationProvider', function($routeProvider, $locationProvider) {

                $routeProvider
                .when("/", {
                    templateUrl : "main.php"
                })
                .when("/productos", {
                    disableCache: true,
                    templateUrl : function (params) {
                        return "productos.php?" + $.now();
                    }
                })
                .when("/contacto", {
                    templateUrl : "contacto.php"
                })

                $locationProvider.html5Mode(true);

            }]);