You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular中如何将$http请求结果追加到$scope.data而非覆盖?

解决方案:将$http返回结果追加到$scope.data而非覆盖

嘿,这个需求很好实现,核心就是把$scope.data初始化为数组,然后在请求成功后用数组方法追加新数据,而不是直接覆盖。我给你一步步梳理修改方案:

关键修改点

  • 初始化数组:首先要把$scope.data初始化为空数组,不然第一次追加时会因为它是undefined报错。
  • 追加数据:在$http的成功回调里,不要直接赋值$scope.data = response.data,而是用数组的push方法(如果返回单个对象)或者扩展运算符批量追加(如果返回数组)。
  • 修复错误回调的小bug:原来的错误提示里用了未定义的e,应该改成errResponse。

修改后的完整代码

app.controller("processModel", function ($scope, $http, $interval) { 
  // 1. 初始化为空数组,确保后续能调用数组方法
  $scope.data = [];
  
  $scope.LoadData = function() { 
    $http({ 
      method: "GET", 
      url: 'Home/DataRefresh', 
      params:{'_': +new Date() } // 加时间戳避免缓存,这个处理很实用!
    }).then(function success(response) { 
      // 2. 追加数据:兼容返回单个对象或数组的情况
      if (Array.isArray(response.data)) {
        $scope.data.push(...response.data);
      } else {
        $scope.data.push(response.data);
      }
    }, function error(errResponse) { 
      // 3. 修复变量名错误,完善错误提示
      alert("data " + errResponse.data + " status " + errResponse.status + " headers " + errResponse.headers());
    });
  }

  // 别忘了启动$interval自动刷新,示例为每5秒调用一次
  $interval($scope.LoadData, 5000);
});

额外说明

  • 如果后端返回的response.data始终是数组,那可以简化成$scope.data.push(...response.data),不用判断类型。
  • 用push方法直接修改原数组,Angular能自动检测到数组变化并更新视图,不需要额外调用$scope.$apply()。
  • 你原来加的时间戳参数{'_': +new Date() }很赞,能有效避免浏览器缓存GET请求,建议保留。

内容的提问来源于stack exchange,提问作者user3776749

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:32:10