My previous articles have described:
Introduction
I assume everyone knows that sorting is the process of arranging items depending on a specified sequence.
In AngularJS is the filter "orderBy". Using it we can do sorting. Now I am showing you the procedure for sorting using AngularJS.
Step 1
Now after downloading this file, you need to add this file to the head section of your application as in the following:
<!doctype html>
<html ng-app>
<!--ng-app is Root Element of AngularJS (This directive Auto Boot-Strap an AngularJS App)-->
<head>
<script src="angular.min.js"></script>
<!--angular.min.js is external Downloaded file-->
<title>Sorting using AngularJS</title>
Step 2
In the next step, I am creating another script in the head section, in which I am defining an array with "Serial Number", "Name" and "Marks", as in following:
<script>
function Ctrl($scope) {
$scope.friends = [{sno:1, name:'Sourabh Somani', Marks:'75'},
{sno:2, name:'Shaili Dashora', Marks:'90'},
{sno:3, name:'Divya Sharma', Marks:'89'},
{sno:4, name:'Swati Soni', Marks:'78'},
{sno:5, name:'Ankit', Marks:'74'}]
}
</script>
I have also created an External CSS file (mystyle.css), So now I am adding this using the following code:
<link rel="stylesheet" type="text/css" href="mystyle.css">
</head>
Note: "mystyle.css" file you can download from uploaded Zip File.
Step 4
Now in the body section I am making a division from the Div tag and in this I am attaching a controller class to the view using the "ng-controller" directive.
<body>
<div ng-controller="Ctrl">
Step 5
Now I am creating a table with its header. These table headers I am binding using a "ng-click" directive. Because whenever the table header is clicked, that column will be sorted depending on the header.
<table cellspacing='0'>
<thead>
<tr>
<th><center><a href="" ng-click="predicate = 'sno'; reverse=!reverse">S.NO</a></center></th>
<th><center><a href="" ng-click="predicate = 'name'; reverse=!reverse">NAMES</a></center></th
<th><center><a href="" ng-click="predicate = 'Marks'; reverse=!reverse">MARKS</a></center></th>
</tr>
</thead>
Here a "predicate" is a comparator to determine the order of the elements. The order may be ascending or descending.
The predicate can be one of the following:
- Function: The '<', '>', '=' operator decides the result of the function.
- String: One of the best properties of AngularJS is to order by 'name'. The '+' and '-' prefixes are used for ascending and descending order respectively, for example '+name' or '-name'. This is the easiest way of sorting.
- Array: Suppose two item values are equivalent like marks of the two students (A and B) are the same like 95% and we are sorting by percentage (%), then there might confusion about whether the student name should be first, so for that the next predicate is used. So we can say an Array may me a Function predicate or a String predicate.
And here the "reverse" boolean type shows the order of the array. Its value may be "False" or "True".
Step 5
Now in the next step I am filling all the elements of the table inside the table body using the following code.
<tbody>
<tr ng-repeat="friend in friends | orderBy:predicate:reverse">
<td>{{friend.sno}}</td>
<td>{{friend.name}}</td>
<td>{{friend.Marks}}%</td>
</tr>
</tbody>
</table>
</div>
</body>
</html>
Complete Code
<!doctype html><!--Root Elemet-->
<html ng-app>
<head>
<script src="angular.min.js"></script>
<title>Sorting using AngularJS</title>
<script>
function Ctrl($scope) {
$scope.friends =[{sno:1, name:'Sourabh Somani', Marks:'75'},
{sno:2, name:'Shaili Dashora', Marks:'90'},
{sno:3, name:'Divya Sharma', Marks:'89'},
{sno:4, name:'Swati Soni', Marks:'78'},
{sno:5, name:'Ankit', Marks:'74'}]
}
</script>
<link rel="stylesheet" type="text/css" href="mystyle.css">
</head>
<body>
<div ng-controller="Ctrl">
<H1>Sorting The List In AngularJS</H1><hr/>
<table cellspacing='0'>
<thead>
<tr>
<th><center><a href="" ng-click="predicate = 'sno'; reverse=!reverse">S.NO</a></center></th>
<th><center><a href="" ng-click="predicate = 'name'; reverse=!reverse">NAMES</a></center></th>
<th><center><a href="" ng-click="predicate = 'Marks'; reverse=!reverse">MARKS</a></center></th>
</tr>
</thead>
<tbody>
<tr ng-repeat="friend in friends | orderBy:predicate:reverse">
<td>{{friend.sno}}</td>
<td>{{friend.name}}</td>
<td>{{friend.Marks}}%</td>
</tr>
</tbody>
</table>
</div>
</body>
</html>
Output
- When the page loads:
- Sorting using Serial Number:
- Sorting by names:
- Sorting by marks: