AngularJS表格详解及示例代码,如何实现动态排序与分页功能?

AngularJS 作为一款经典的前端框架,其数据双向绑定和模块化特性为表格开发提供了强大支持,通过内置的 ng-repeat 指令和丰富的过滤器,开发者可以轻松实现动态数据渲染、排序、筛选等功能,本文将详细解析 AngularJS 表格的核心功能,结合示例代码展示实际应用场景。

AngularJS表格详解及示例代码,如何实现动态排序与分页功能?

基础表格渲染

AngularJS 表格的核心是 ng-repeat 指令,该指令用于遍历数组或对象数据并动态生成表格行,以下是一个基础示例:

<table>
  <thead>
    <tr>
      <th>姓名</th>
      <th>年龄</th>
      <th>职业</th>
    </tr>
  </thead>
  <tbody>
    <tr ng-repeat="user in users">
      <td>{{user.name}}</td>
      <td>{{user.age}}</td>
      <td>{{user.job}}</td>
    </tr>
  </tbody>
</table>

对应的 JavaScript 代码:

angular.module('myApp', [])
  .controller('TableController', function($scope) {
    $scope.users = [
      {name: '张三', age: 28, job: '工程师'},
      {name: '李四', age: 32, job: '设计师'},
      {name: '王五', age: 24, job: '产品经理'}
    ];
  });

此示例中,ng-repeat 遍历 users 数组,为每个用户对象生成一行表格数据。 语法用于数据绑定,确保视图与模型数据同步更新。

表格排序功能

AngularJS 提供了 orderBy 过滤器,可轻松实现表格列排序,通过在 ng-repeat 中指定排序字段和排序方向,即可实现动态排序:

<table>
  <thead>
    <tr>
      <th ng-click="sortBy('name')">姓名 
        <span ng-show sortKey === 'name' 
              ng-class="reverse ? 'desc' : 'asc'"></span>
      </th>
      <th ng-click="sortBy('age')">年龄 
        <span ng-show sortKey === 'age' 
              ng-class="reverse ? 'desc' : 'asc'"></span>
      </th>
    </tr>
  </thead>
  <tbody>
    <tr ng-repeat="user in users | orderBy:sortKey:reverse">
      <td>{{user.name}}</td>
      <td>{{user.age}}</td>
    </tr>
  </tbody>
</table>

控制器代码需添加排序逻辑:

$scope.sortKey = 'name';
$scope.reverse = false;
$scope.sortBy = function(key) {
  $scope.reverse = ($scope.sortKey === key) ? !$scope.reverse : false;
  $scope.sortKey = key;
};

点击表头时,sortBy 方法会切换排序字段和方向,orderBy 过滤器根据参数动态渲染排序结果。

AngularJS表格详解及示例代码,如何实现动态排序与分页功能?

表格筛选功能

结合 filter 过滤器,可实现基于用户输入的实时筛选,以下示例展示如何通过搜索框过滤表格数据:

<input type="text" ng-model="searchText" placeholder="搜索...">
<table>
  <tbody>
    <tr ng-repeat="user in users | filter:searchText">
      <td>{{user.name}}</td>
      <td>{{user.age}}</td>
    </tr>
  </tbody>
</table>

filter 过滤器会根据 searchText 的值实时匹配 users 数组中的对象,仅显示符合条件的数据,默认情况下,过滤器会对所有属性进行模糊匹配,可通过指定属性名实现精确筛选,如 filter:{name:searchText}。

分页功能实现

对于大数据集,分页是必要的优化手段,以下实现包含分页控制器和分页按钮:

<div>
  <table>
    <tbody>
      <tr ng-repeat="user in users | limitTo:itemsPerPage:currentPage*itemsPerPage">
        <td>{{user.name}}</td>
        <td>{{user.age}}</td>
      </tr>
    </tbody>
  </table>
  <div class="pagination">
    <button ng-disabled="currentPage === 0" 
            ng-click="currentPage = currentPage - 1">上一页</button>
    <span>第 {{currentPage + 1}} 页</span>
    <button ng-disabled="currentPage >= users.length/itemsPerPage - 1" 
            ng-click="currentPage = currentPage + 1">下一页</button>
  </div>
</div>

控制器代码:

$scope.currentPage = 0;
$scope.itemsPerPage = 5;

limitTo 过滤器通过计算 currentPage 和 itemsPerPage 实现数据分片,分页按钮通过修改 currentPage 控制显示的数据范围。

表格样式与交互

结合 CSS 框架(如 Bootstrap)可快速美化表格,AngularJS 的 ng-class 指令还能实现动态样式绑定:

AngularJS表格详解及示例代码,如何实现动态排序与分页功能?

<table class="table table-striped">
  <tr ng-repeat="user in users" 
      ng-class="{'highlight': user.age > 30}">
    <td>{{user.name}}</td>
    <td>{{user.age}}</td>
  </tr>
</table>

通过 ng-class 动态添加 highlight 类,可为年龄大于 30 的行设置特殊样式。ng-mouseenter 和 ng-click 等指令可实现行悬停效果和点击事件,增强用户交互体验。

复杂表格示例

以下综合示例展示包含排序、筛选、分页和样式的完整表格:

<div ng-app="myApp" ng-controller="TableController">
  <input type="text" ng-model="searchText" placeholder="搜索...">
  <table class="table table-bordered">
    <thead>
      <tr>
        <th ng-click="sortBy('name')">姓名 
          <span ng-show="sortKey === 'name'" 
                ng-class="reverse ? 'glyphicon glyphicon-chevron-down' : 'glyphicon glyphicon-chevron-up'"></span>
        </th>
        <th ng-click="sortBy('age')">年龄 
          <span ng-show="sortKey === 'age'" 
                ng-class="reverse ? 'glyphicon glyphicon-chevron-down' : 'glyphicon glyphicon-chevron-up'"></span>
        </th>
        <th ng-click="sortBy('job')">职业</th>
      </tr>
    </thead>
    <tbody>
      <tr ng-repeat="user in filteredUsers = (users | filter:searchText | orderBy:sortKey:reverse) 
                    | limitTo:itemsPerPage:currentPage*itemsPerPage">
        <td>{{user.name}}</td>
        <td>{{user.age}}</td>
        <td>{{user.job}}</td>
      </tr>
    </tbody>
  </table>
  <div class="pagination">
    <button ng-disabled="currentPage === 0" 
            ng-click="currentPage = currentPage - 1">上一页</button>
    <span>共 {{filteredUsers.length}} 条记录</span>
    <button ng-disabled="currentPage >= filteredUsers.length/itemsPerPage - 1" 
            ng-click="currentPage = currentPage + 1">下一页</button>
  </div>
</div>

对应的控制器需包含所有逻辑:

angular.module('myApp', [])
  .controller('TableController', function($scope) {
    $scope.users = [
      {name: '张三', age: 28, job: '工程师'},
      {name: '李四', age: 32, job: '设计师'},
      {name: '王五', age: 24, job: '产品经理'},
      {name: '赵六', age: 35, job: '经理'},
      {name: '钱七', age: 29, job: '开发'}
    ];
    $scope.sortKey = 'name';
    $scope.reverse = false;
    $scope.currentPage = 0;
    $scope.itemsPerPage = 3;
    $scope.sortBy = function(key) {
      $scope.reverse = ($scope.sortKey === key) ? !$scope.reverse : false;
      $scope.sortKey = key;
    };
  });

此示例中,filteredUsers 变量存储筛选和排序后的结果,分页逻辑基于过滤后的数据计算,确保分页准确性,通过合理组合 AngularJS 指令和过滤器,可构建功能完善、性能良好的动态表格。

图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/50852.html

赞 (0)
上一篇 2025年11月2日 21:32
下一篇 2025年11月2日 21:36

相关推荐

  • 西安蒲公英服务器如何快速搭建异地组网?

    在古老文明与现代科技交相辉映的城市——西安,一场深刻的数字化转型正在悄然发生,从雄伟的兵马俑到繁忙的西安高新技术产业开发区,这座古都正以全新的姿态拥抱信息时代的浪潮,在这一进程中,高效、安全、灵活的网络连接成为驱动各行各业创新发展的核心引擎,正是在这样的背景下,“蒲公英服务器”这一概念,作为一种智能组网解决方案……

    2025年10月28日
    03470
  • gb是哪里的网站域名?解析该域名地理位置与归属信息

    在当今数字化时代,网站域名作为互联网身份标识的核心,其背后的国家代码顶级域名(ccTLD)如GB、CN等,不仅是地域归属的符号,更是网络资源分配、政策法规遵循的关键依据,“GB”作为国家代码,常引发关于其地理指向的疑问——GB究竟是代表哪个国家或地区?这一问题的解答,不仅关乎域名管理的专业认知,更关联着全球互联……

    2026年1月23日
    05190
  • Go游戏服务器框架比较,在众多选择中,哪个框架最适合你的项目需求?

    Go语言凭借其轻量级并发模型、静态编译特性与卓越的性能表现,在游戏服务器领域占据重要地位,选择合适的框架是提升开发效率、优化服务器性能的关键环节,本文将从技术特性、性能表现、生态支持及适用场景等多个维度,对比主流Go游戏服务器框架,并结合酷番云的实际项目经验,为开发者提供决策参考,主流Go游戏服务器框架概述在G……

    2026年1月17日
    04145
    • 服务器间歇性无响应是什么原因?如何排查解决?

      根源分析、排查逻辑与解决方案服务器间歇性无响应是IT运维中常见的复杂问题,指服务器在特定场景下(如高并发时段、特定操作触发时)出现短暂无响应、延迟或服务中断,而非持续性的宕机,这类问题对业务连续性、用户体验和系统稳定性构成直接威胁,需结合多维度因素深入排查与解决,常见原因分析:从硬件到软件的多维溯源服务器间歇性……

      2026年1月10日
      020
  • 服务器如何做公网域名解析?步骤详解

    明确需求与环境在进行公网域名解析前,需完成必要的准备工作,确保后续步骤顺利推进,需明确域名解析的核心需求,例如是将域名指向网站服务器(如IPv4或IPv6地址)、邮件服务器(MX记录),还是实现负载均衡(如多IP轮询),确认域名所有权,只有完成域名注册并持有域名管理权限(如登录域名注册商提供的控制台),才能进行……

    2025年12月23日
    04560

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注