5

我正在使用 AngularJS 框架创建一个应用程序。

问题:

当我跳出我的应用程序到不同的域或页面时,然后当我使用历史返回按钮返回我的应用程序时,我只返回 JSON。当我跳出我的应用程序浏览历史记录时会发生同样的情况,然后当我使用前进按钮转到我的应用程序时,我再次只得到 JSON。后退/前进在我的应用程序中工作正常,只有当我去不同的域时才会发生。

这是为什么?我认为这与缓存某些方式有关,因为当我返回/转发到我的应用程序时,没有请求发送到服务器。

如果您访问此网址 - http://test.deving.cz/admin/prihlasit/,您会看到我在说什么。然后后退再前进。

我的设置:

我的应用程序配置为使用 HTML5 历史 API。对于以 mydomain.com/admin/ 开头的 url,我总是返回一个包含 angular 的 index.hmtl。然后对于我的应用程序中的每个其他 url,都会发送两个请求。一个用于模板,一个用于数据(JSON)。

例子:

$routeProvider.when('/admin/page/', {controller: 'PageListCtrl', templateUrl: '/templates/page/list/', resolve: 'PageListCtrl.resolve'})

页面列表控件:

angular.module('page').controller('PageListCtrl', ['$scope', 'data', function($scope, data) {
    $scope.pages = data;
}]);

解决功能:

resolve = {data: 
            function($http, $q){
                var delay = $q.defer();
                $http.get().success(function(data){
                    delay.resolve(data['data']);
                });
                return delay.promise;
            }
        }

我应该如何配置 angular 或我的应用程序来告诉浏览器不要缓存数据并始终获取 index.html 然后让 angular 执行请求?

4

2 回答 2

4

I got the same problem. While I found a workaround to this problem, I think there must exist a better solution. So if you have any more better solution please let me know.

The server side framework I'm using is Rails. So I add the following code

  response.headers["Cache-Control"] = "no-cache, no-store, max-age=0, must-revalidate"
  response.headers["Pragma"] = "no-cache"
  response.headers["Expires"] = "Fri, 01 Jan 1990 00:00:00 GMT"

These lines will prevent browser to cache your request, and you can detect whether a request is a XHR to decide add the above lines or not.

于 2013-07-25T10:02:16.237 回答
3

在评论中 Ajay beniwal 建议阻止浏览器缓存,url 应该是动态的:

 '/partials/indexpage.html?id=' + new Date().getTime()

所以如果我在我的解析函数中做这样的事情:

$http.get($location.path() + '?id=' + new Date().getTime())

该应用程序和历史浏览工作正常。

但是我觉得猴子修补了一个严重的问题。因此,如果有人有更好的答案可以实际解决问题的原因,请随时回答。

于 2013-07-11T14:29:04.923 回答