【问题标题】:Don't reload page when back button is pressed - AngularJS按下后退按钮时不要重新加载页面 - AngularJS
【发布时间】:2014-02-17 08:38:31
【问题描述】:

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

【问题讨论】:

标签: javascript ajax angularjs


【解决方案1】:

我强烈建议你多学习 AngularJS 中路由的使用

观看 John 的一些教程是一种不错且快速的方法,从以下教程开始:https://egghead.io/lessons/angularjs-ng-view

最后,您要完成的工作显示在此:https://egghead.io/lessons/angularjs-route-life-cycle

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    在我目前正在开发的一个应用程序中,我对每个模块都大量使用了$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。

    值得一提的是,我的客户也提出了一些奇怪的要求,因此这很可能不是解决此问题的最佳方法(它甚至可能是一种反模式,尽管我喜欢认为这只是暂时的黑客)。

    【讨论】:

      【解决方案3】:

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

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

      https://docs.angularjs.org/api/ngResource/service/$resource

      例子:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-26
        • 2023-03-03
        • 2011-06-05
        • 1970-01-01
        • 2018-03-29
        • 2013-10-13
        • 1970-01-01
        • 2012-02-22
        相关资源
        最近更新 更多