【发布时间】:2017-01-07 17:17:46
【问题描述】:
在我从this thread 借来的this plunker example 中,有一个很棒的示例,说明如何使用AngularJs 创建分页网格。 (我的问题与this similar question 有点不同。)
在我们的一个项目中,我们有一个非常相似的解决方案,但为了获得一些帮助,我将使用我上面提到的 plunker 的代码。
我的目标:我想让屏幕阅读器更容易访问底部的分页网格这是通过在网格的按钮上添加一些 aria-labels 来完成的,例如
aria-label="Go to first page"
aria-label="Go to previous page"
aria-label="Go to page 3"
等等。我该如何做到这一点?
最后,代码如下:
模板:
<!DOCTYPE html>
<html ng-app="todos">
<head>
<link data-require="bootstrap-css@*" data-semver="3.3.1" rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css" />
<script data-require="angular.js@*" data-semver="1.3.15" src="https://code.angularjs.org/1.3.15/angular.js"></script>
<script data-require="ui-bootstrap@*" data-semver="0.12.1" src="http://angular-ui.github.io/bootstrap/ui-bootstrap-tpls-0.12.1.min.js"> </script>
<link rel="stylesheet" href="style.css" />
<script src="script.js"></script>
</head>
<body ng-controller="TodoController">
<h1>Todos</h1>
<h4>{{todos.length}} total</h4>
<ul>
<li ng-repeat="todo in filteredTodos">{{todo.text}}</li>
</ul>
<pagination
ng-model="currentPage"
total-items="todos.length"
max-size="maxSize"
boundary-links="true">
</pagination>
</body>
</html>
控制器:
var todos = angular.module('todos', ['ui.bootstrap']);
todos.controller('TodoController', function($scope) {
$scope.filteredTodos = []
,$scope.currentPage = 1
,$scope.numPerPage = 10
,$scope.maxSize = 5;
$scope.makeTodos = function() {
$scope.todos = [];
for (i=1;i<=1000;i++) {
$scope.todos.push({ text:'todo '+i, done:false});
}
};
$scope.makeTodos();
$scope.$watch('currentPage + numPerPage', function() {
var begin = (($scope.currentPage - 1) * $scope.numPerPage)
, end = begin + $scope.numPerPage;
$scope.filteredTodos = $scope.todos.slice(begin, end);
});
});
【问题讨论】:
-
嗨@Ilias,您可以将uib-pagination用于角度。同时添加来自docs.angularjs.org/api/ngAria 的ngAria.js。然后您的控制元素将自动由 ngAria 处理。在这种情况下,屏幕阅读器将读取 1,2 等等。
标签: angularjs pagination accessibility screen-readers