按下后退按钮时不要重新加载页面 - AngularJS

时间:2014-01-26 15:13:37

标签: javascript ajax angularjs

我正在使用AngularJS开发一个AJAX密集的应用程序,当用户点击浏览器上的后退按钮时,需要不再重新生成请求。例如,一组数据需要2-3秒才能加载,然后如果用户导航到另一个页面然后点击返回,则必须重新加载数据。有没有办法防止这种情况 - 或者另外一种方法来设计我的应用程序,以便数据在会话中持续存在?

3 个答案:

答案 0 :(得分:1)

如果您使用 ngResource 从api加载数据,请在操作中将缓存设置为true,如文档

中所述
  

cache - {boolean | Cache} - 如果为true,将使用默认的$ http缓存来缓存GET请求,否则如果使用$ cacheFactory构建缓存实例,则此缓存将用于缓存。

https://docs.angularjs.org/api/ngResource/service/ $资源

示例:

this.service=$resource('www.example.com/api/v/stats',
        {
            callback: "JSON_CALLBACK"
        }, {'foo': {'method': 'GET', 'cache': true}}
    );

通过 this.service.foo()加载数据将缓存请求,并在后退按钮上,它将使用缓存的数据而不是重新加载它。

答案 1 :(得分:0)

我强烈建议您通过AngularJS

更多地研究路由的使用

一个好的,快速的方法是观看John的一些教程,从这一篇开始:https://egghead.io/lessons/angularjs-ng-view

最后,您要完成的工作如下所示:https://egghead.io/lessons/angularjs-route-life-cycle

希望这有帮助。

答案 2 :(得分:0)

在我正在开发的应用中,我对每个模块大量使用$routeProvider。 我做了类似的事情:

$routeProvider.when(/someModule/page1Condition1, {templateUrl: 'page1.tpl.html', controller: 'page1Ctrl'});
$routeProvider.when(/someModule/page1Condition2, {templateUrl: 'page1.tpl.html', controller: 'page1Ctrl'});

然后,在page1的控制器中,我做了类似的事情:

if($location.path()==='/someModule/page1Condition2){
    // something that should be done only when Condition2 is true,
    // for example, loading data using ajax
    $http.get('somePath')
        .success(function(data){
            $scope.myData = angular.fromJson(data);
        });
} 

通过这种方式,我只有一个控制器,但使用url路径作为信息源有条件地获取数据。可以把它想象成尽可能接近REST的东西,但实际上并不是REST。

重要的是要提到我的客户也有几个奇怪的要求,因此这很可能不是解决这个问题的最好方法(它甚至可能是反模式,尽管我觉得这只是暂时的劈)。