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

如何让ngTable分页样式兼容Bootstrap 2.3.2(AngularJS 1.8.2)

ngTable分页样式适配Bootstrap 2.3.2解决方案

问题背景

基于AngularJS 1.8.2开发的应用,使用Bootstrap.css 2.3.2版本,集成ngTable 1.0.0后分页样式异常,无法升级Bootstrap版本,需要适配现有Bootstrap 2.3.2的分页样式。

ngTable分页样式异常截图

解决思路

ngTable 1.0.0的分页组件默认采用Bootstrap 3+的CSS类结构,而Bootstrap 2.3.2的分页类差异较大。通过添加自定义CSS覆盖ngTable的分页样式,使其匹配Bootstrap 2.3.2的视觉规范,同时保证自定义样式优先级高于原有样式。

具体实现

1. 添加自定义适配CSS

在页面的<head>中,引入ngTable样式之后添加以下自定义CSS:

/* 适配Bootstrap 2.3.2的ngTable分页样式 */
.ng-table-pagination {
  margin: 20px 0;
}
.ng-table-pagination .pagination {
  margin: 0;
}
.ng-table-pagination .pagination ul {
  display: inline-block;
  margin-bottom: 0;
  margin-left: 0;
  -webkit-border-radius: 4px;
  -moz-border-radius: 4px;
  border-radius: 4px;
  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
  -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
}
.ng-table-pagination .pagination ul > li {
  display: inline;
}
.ng-table-pagination .pagination ul > li > a,
.ng-table-pagination .pagination ul > li > span {
  float: left;
  padding: 4px 12px;
  line-height: 20px;
  text-decoration: none;
  background-color: #ffffff;
  border: 1px solid #dddddd;
  border-left-width: 0;
}
.ng-table-pagination .pagination ul > li > a:hover,
.ng-table-pagination .pagination ul > li > a:focus,
.ng-table-pagination .pagination ul > .active > a,
.ng-table-pagination .pagination ul > .active > span {
  background-color: #f5f5f5;
}
.ng-table-pagination .pagination ul > .active > a,
.ng-table-pagination .pagination ul > .active > span {
  color: #999999;
  cursor: default;
}
.ng-table-pagination .pagination ul > .disabled > span,
.ng-table-pagination .pagination ul > .disabled > a,
.ng-table-pagination .pagination ul > .disabled > a:hover,
.ng-table-pagination .pagination ul > .disabled > a:focus {
  color: #999999;
  cursor: default;
  background-color: transparent;
}
.ng-table-pagination .pagination ul > li:first-child > a,
.ng-table-pagination .pagination ul > li:first-child > span {
  border-left-width: 1px;
  -webkit-border-bottom-left-radius: 4px;
  border-bottom-left-radius: 4px;
  -webkit-border-top-left-radius: 4px;
  border-top-left-radius: 4px;
  -moz-border-radius-bottomleft: 4px;
  -moz-border-radius-topleft: 4px;
}
.ng-table-pagination .pagination ul > li:last-child > a,
.ng-table-pagination .pagination ul > li:last-child > span {
  -webkit-border-top-right-radius: 4px;
  border-top-right-radius: 4px;
  -webkit-border-bottom-right-radius: 4px;
  border-bottom-right-radius: 4px;
  -moz-border-radius-topright: 4px;
  -moz-border-radius-bottomright: 4px;
}
.ng-table-pagination .pagination-centered {
  text-align: center;
}
.ng-table-pagination .pagination-right {
  text-align: right;
}
.ng-table-pagination .pagination-page-size {
  display: inline-block;
  margin-left: 10px;
  vertical-align: middle;
}
.ng-table-pagination .pagination-page-size select {
  margin-bottom: 0;
}

2. 完整修改后的代码

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>AngularJs Table with ng-table module Example</title>
    <script src="https://code.angularjs.org/1.8.2/angular.js"></script>    
    <script src="http://code.angularjs.org/1.8.2/angular-resource.js"></script>    
    <link href="https://netdna.bootstrapcdn.com/bootstrap/2.3.2/css/bootstrap.min.css" rel="stylesheet" media="screen">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/ng-table/1.0.0/ng-table.min.css">
    <script src="https://cdnjs.cloudflare.com/ajax/libs/ng-table/1.0.0/ng-table.min.js"></script>
    <!-- 自定义适配Bootstrap 2.3.2的ngTable分页样式 -->
    <style type="text/css">
        /* 适配Bootstrap 2.3.2的ngTable分页样式 */
        .ng-table-pagination {
          margin: 20px 0;
        }
        .ng-table-pagination .pagination {
          margin: 0;
        }
        .ng-table-pagination .pagination ul {
          display: inline-block;
          margin-bottom: 0;
          margin-left: 0;
          -webkit-border-radius: 4px;
          -moz-border-radius: 4px;
          border-radius: 4px;
          -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
          -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
          box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
        }
        .ng-table-pagination .pagination ul > li {
          display: inline;
        }
        .ng-table-pagination .pagination ul > li > a,
        .ng-table-pagination .pagination ul > li > span {
          float: left;
          padding: 4px 12px;
          line-height: 20px;
          text-decoration: none;
          background-color: #ffffff;
          border: 1px solid #dddddd;
          border-left-width: 0;
        }
        .ng-table-pagination .pagination ul > li > a:hover,
        .ng-table-pagination .pagination ul > li > a:focus,
        .ng-table-pagination .pagination ul > .active > a,
        .ng-table-pagination .pagination ul > .active > span {
          background-color: #f5f5f5;
        }
        .ng-table-pagination .pagination ul > .active > a,
        .ng-table-pagination .pagination ul > .active > span {
          color: #999999;
          cursor: default;
        }
        .ng-table-pagination .pagination ul > .disabled > span,
        .ng-table-pagination .pagination ul > .disabled > a,
        .ng-table-pagination .pagination ul > .disabled > a:hover,
        .ng-table-pagination .pagination ul > .disabled > a:focus {
          color: #999999;
          cursor: default;
          background-color: transparent;
        }
        .ng-table-pagination .pagination ul > li:first-child > a,
        .ng-table-pagination .pagination ul > li:first-child > span {
          border-left-width: 1px;
          -webkit-border-bottom-left-radius: 4px;
          border-bottom-left-radius: 4px;
          -webkit-border-top-left-radius: 4px;
          border-top-left-radius: 4px;
          -moz-border-radius-bottomleft: 4px;
          -moz-border-radius-topleft: 4px;
        }
        .ng-table-pagination .pagination ul > li:last-child > a,
        .ng-table-pagination .pagination ul > li:last-child > span {
          -webkit-border-top-right-radius: 4px;
          border-top-right-radius: 4px;
          -webkit-border-bottom-right-radius: 4px;
          border-bottom-right-radius: 4px;
          -moz-border-radius-topright: 4px;
          -moz-border-radius-bottomright: 4px;
        }
        .ng-table-pagination .pagination-centered {
          text-align: center;
        }
        .ng-table-pagination .pagination-right {
          text-align: right;
        }
        .ng-table-pagination .pagination-page-size {
          display: inline-block;
          margin-left: 10px;
          vertical-align: middle;
        }
        .ng-table-pagination .pagination-page-size select {
          margin-bottom: 0;
        }
    </style>
    <script type="text/javascript">
        var app = angular.module("ngtableApp", ["ngTable"]);
        app.controller("ngtableCtrl", function ($scope, $filter, NgTableParams) {
            $scope.users =[];
            $scope.users = [
                { name: "Madhav Sai", age: 10, location: 'Nagpur' },
                { name: "Suresh Dasari", age: 30, location: 'Chennai' },
                { name: "Rohini Alavala", age: 29, location: 'Chennai' },
                { name: "Praveen Kumar", age: 25, location: 'Bangalore' },
                { name: "Sateesh Chandra", age: 27, location: 'Vizag' },
                { name: "Siva Prasad", age: 38, location: 'Nagpur' },
                { name: "Sudheer Rayana", age: 25, location: 'Kakinada' },
                { name: "Honey Yemineni", age: 7, location: 'Nagpur' },
                { name: "Mahendra Dasari", age: 22, location: 'Vijayawada' },
                { name: "Mahesh Dasari", age: 23, location: 'California' },
                { name: "Nagaraju Dasari", age: 34, location: 'Atlanta' },
                { name: "Gopi Krishna", age: 29, location: 'Repalle' },
                { name: "Sudheer Uppala", age: 19, location: 'Guntur' },
                { name: "Sushmita", age: 27, location: 'Vizag' }
            ];
            $scope.usersTable = new NgTableParams({
                page: 1,
                count: 5
            }, 
            {
                total: $scope.users.length,
                getData:function (params) {
                    $scope.data = params.sorting() ? $filter('orderBy')($scope.users, params.orderBy()) : $scope.users;
                    $scope.data = params.filter() ? $filter('filter')($scope.data, params.filter()) : $scope.data;
                    $scope.data = $scope.data.slice((params.page() - 1) * params.count(), params.page() * params.count());
                    return $scope.data;
                }
            });
        });
    </script>
</head>
<body ng-app="ngtableApp">
    <div ng-controller="ngtableCtrl">
        <h2>AngularJS ng-table Filtering Example</h2>
        <table ng-table = "usersTable" show-filter=true class="table table-bordered table-striped">
            <tr ng-repeat="user in data">
                <td data-title="'Name'" sortable="'name'" filter="{ 'name': 'text' }">{{user.name}}</td>
                <td data-title="'Age'" sortable="'age'" filter="{ 'age': 'text' }">{{user.age}}</td>
                <td data-title="'Location'" sortable="'location'" filter="{ 'location': 'text' }">{{user.location}}</td>
            </tr>
        </table>
    </div>
</body>
</html>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 17:42:02