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

如何在AngularJS中实现数据列表自动刷新无需整页重载

AngularJS列表自动刷新实现方案

方案1:定时轮询(改动最小,适合低实时性需求)

该方案无需修改后端接口,仅调整前端逻辑即可实现需求:

第一步:调整控制器依赖注入

在crudController的依赖中新增AngularJS内置的$interval定时服务:

app.controller('crudController', function($scope, $http, $interval) {

第二步:添加定时刷新逻辑

在控制器代码起始位置添加初始化逻辑,页面加载后自动定时拉取最新列表数据:

$scope.buttonName = "Add";

// 新增代码开始
// 页面初始化先拉取一次数据
$scope.displayUsers();
// 每3秒拉取一次最新列表,间隔时间可自定义,单位为毫秒
var autoRefresh = $interval($scope.displayUsers, 3000);
// 控制器销毁时清除定时器,避免内存泄漏
$scope.$on('$destroy', function() {
  $interval.cancel(autoRefresh);
});
// 新增代码结束

$scope.displayUsers = function() {
    $http.get('select.php')
    .success(function(data) {
        $scope.students = data;
    })
}

可选优化:可以配合document.hidden判断页面是否处于激活状态,非激活状态暂停轮询,进一步降低服务器和客户端资源消耗。

第三步:修复现有HTML结构问题

你当前的列表行<tr>写在了<tbody>标签外,会导致渲染异常,调整为:

<table class="table table-striped">
<thead>
    <tr>
        <th><center>UNIT</center></th>
        <th><center>QUANTITY (PCS)</center></th>
        <th><center>ACTION</center></th>
    </tr>
</thead>
<tbody>
    <tr ng-repeat="student in students | filter:searchUser">
        <td>{{ student.name }}</td>
        <td>{{ student.email }}</td>
        <td>
        <button class="btn btn-info" ng-click="updateData(student.id, student.name, student.email)">Update</button>
        <button class="btn btn-danger" ng-click="deleteData(student.id)">Remove</button>
        </td>
    </tr>
</tbody>
</table>

方案2:WebSocket实时推送(适合高实时性需求)

如果对数据刷新延迟要求很高,不想用轮询占用服务器资源,可以在后端对接WebSocket服务,前端监听后端推送的新增/修改/删除事件,收到事件后调用$scope.displayUsers()刷新列表即可,无需主动定时拉取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 17:45:03