Pages

Monday 12 October 2015

CRUD Operation, Searching, sorting and pagination using AngluarJs

This is one simple angularjs Application with  Searching,Sorting, Pagination,
along with CRUD  Operation on simple array of object.

Before doing copy paste kindly add one additional JS file i.e
dirPagination.js.
After that just change the reference address of that file which is 
specified in head section.

To get dirPagination.js Click here. 

<div dir="ltr" style="text-align: left;" trbidi="on">


<!DOCTYPE html>
<html>
<head>

<script 
src= "http://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js">
</script>
<script src="D:/Study/anugular/dirPagination.js"></script>
<link rel="stylesheet"
 href="http://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">

<style>
#tbl ,th, td {
  border: 1px solid grey;
  border-collapse: collapse;
  padding: 5px;
}
#tbl 
{
   width:100%;
}

div 
{
 margin:5%;
 width:500px;
}

.label
{
   background-color: #707070;
}

#tbl tr:nth-child(odd) {
  background-color: #f1f1f1;
}
#tbl tr:nth-child(even) {
  background-color: #ffffff;
}
</style>

</head>

<body>

<div  ng-app="myApp"  ng-controller="personCtrl">

<!-- Create New Employee -->
<div ng-hide="editorEnabled">
<form name="myForm" ng-model="formModel" ng-submit="addEmployee()" 
novalidate> <table id="tbl">
<tr>
<td>Name: </td>
<td>
<input type="text" name="username" ng-model="name" required>
 
</td>
</tr>
<tr>
<td>Country:</td>
<td><input type="text" ng-model="country" required></td>
</tr>
<tr>
<td>Age:</td>
<td> <input type="number" ng-model="age" required></td>
</tr>
<tr>
<td>Email:</td>
<td><input type="email" name="emailid" ng-model="email" required>

</td>
</tr>
<tr>
<td>Gender:</td>
<td><label data-ng-repeat="gender in genders">
    <input name="Gender"  type="radio"  value="{{gender.value}}" 
  ng-model="$parent.personGender" />  {{gender.text}}   
</label></td>
</tr>
<tr>
<td>Department:</td>
<td>
 <select name="dept" ng-model="department" > 
 <option  data-ng-repeat="dept in departments" 
       value="{{dept.value}}">{{dept.text}}</option>
 </select>
<span style="color:red" ng-show="myForm.dept.$dirty && myForm.dept.$invalid">
  <span ng-show="myForm.dept.$error.required">Department is required.</span>
  </span> </span>
</td>
</tr>
<tr>
<td colspan="2">
<input type="submit" >
</td>
</tr>
</table>
</form>
</div>

<!-- Edit Employee -->
<div ng-show="editorEnabled">
<form name="editablemyForm" ng-model="editableformModel" ng-submit="saveEmployee()" 
 novalidate>
<table id="tbl">
<tr>
<td>Name: </td>
<td>
<input type="text" name="editableusername" ng-model="editablename" required>
 
</td>
</tr>
<tr>
<td>Country:</td>
<td><input type="text" ng-model="editablecountry" required></td>
</tr>
<tr>
<td>Age:</td>
<td> <input type="number" ng-model="editableage" required></td>
</tr>
<tr>
<td>Email:</td>
<td><input type="email" ng-model="editableemail" required></td>
</tr>
<tr>
<td>Gender:</td>
<td><label data-ng-repeat="gender in genders">
    <input name="editableGender"  type="radio"  value="{{gender.value}}"
   ng-model="$parent.editablepersonGender"/>  {{gender.text}}   
</label></td>
</tr>
<tr>
<td>Department:</td>
<td>
 <select name="dept" ng-model="editabledepartment">
 <option   data-ng-repeat="dept in departments" 
       value="{{dept.value}}">{{dept.text}}</option>
 </select>
</td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="Update" >
<input type="button" value="Cancel"  ng-click="CancelEdit()" >
</td>
</tr>
</table>
</form>
</div>

<br/>

<span class="label">Ordered By: {{orderByField}}, 
Reverse Sort: {{reverseSort}}</span><br><br>
            <label>Search</label>
            <input type="text" ng-model="search" class="form-control" 
         placeholder="Search">
 <b>  Size :</b> <input type="text" ng-model="pagesize" 
class="form-control" placeholder="Size">
 </br>
<table class="table table-bordered">
<thead>
<th>
Edit
</th>
<th> 
 <a href="#" ng-click="orderByField='id';
   reverseSort = !reverseSort">Id
 <span ng-show="orderByField == 'id'">
 <span ng-show="!reverseSort">^</span>
 <span ng-show="reverseSort">v</span></span>
 </a>
</th>
<th> 
 <a href="#" ng-click="orderByField='name';
       reverseSort = !reverseSort">Name
 <span ng-show="orderByField == 'name'">
 <span ng-show="!reverseSort">^</span>
 <span ng-show="reverseSort">v</span></span>
 </a>
</th>
<th>Country</th>
<th>
 <a href="#" ng-click="orderByField='age';
        reverseSort = !reverseSort">
   Age <span ng-show="orderByField == 'age'">
 <span ng-show="!reverseSort">^</span>
 <span ng-show="reverseSort">v</span>
 </span>
          </a>
</th>
<th>Email</th>
<th>Gender</th>
<th>Department</th>
<th>Remove</th>
</thead>
<tr dir-paginate="employee in employees| orderBy:orderByField:reverseSort | 
filter:{name:search || ''}:strict | itemsPerPage:pagesize">
<!-- <tr ng-repeat="employee in employees| orderBy:orderByField:reverseSort | 
filter:{name:search || ''}:strict "> -->
 <td>
      <button class="btn" ng-click="editEmployee(employee.id)">
        <span class="glyphicon glyphicon-pencil"></span>  Edit
      </button>
</td>
<td>{{employee.id}}</td>
 <td>{{employee.name}}</td>
<td>{{employee.country}}</td>
<td>{{employee.age}}</td>
<td>{{employee.email}}</td>
<td>{{getGenderTextFromValue(employee.gender)}} </td>
<td>{{getDepartmentTextFromValue(employee.department)}}</td>
<td><input type="button" value="Remove" class="btn btn-primary" ng-disabled="editorEnabled" ng-click="deleteEmployee(employee.id)"/>
</td>
</tr>
</table>
<!--Pagination Control-->
  <dir-pagination-controls   max-size="pagesize" direction-links="true" boundary-links="true" >
    </dir-pagination-controls>
</div>
</body>
</html>
<script>
var app = angular.module('myApp', ['angularUtils.directives.dirPagination']);

app.controller('personCtrl', function($scope) {
/****Initialisation at start ********/
 $scope.orderByField = 'id';
$scope.reverseSort = false;
$scope.pagesize = 4;
$scope.personGender=3;
$scope.editorEnabled = false;


 $scope.employees = [
        {id:1,name:'Jani',country:'Norway',age:30,email:'aq@b.com', gender:1,department:2},
        {id:2,name:'Hege',country:'Sweden',age:20,email:'aw@b.com',gender:3,department:4},
        {id:3,name:'Kai',country:'Denmark',age:22,email:'ad@b.com',gender:2,department:1},
        {id:4,name:'Raj',country:'India',age:25,email:'aa@b.com',gender:1,department:3},
        {id:5,name:'Rani',country:'Nepal',age:24,email:'as@b.com',gender:2,department:1}
    ];

 $scope.genders =
        [
           {value:1, text: "Male"}, {value:2, text:"Female"}, {value:3, text:"Other"}
        ];

 $scope.departments =
        [
           {value:1, text: "HR"}, {value:2, text:"Admin"}, {value:3, text:"IT"}, {value:4, text:"Finance"}
        ];



/******find gender text from value**********/
 
$scope.getGenderTextFromValue = function(value) { 
  for (i in $scope.genders) {
            if ($scope.genders[i].value==value) {
  return $scope.genders[i].text ;
 }
         }
};



/******find department text from value**********/
 
$scope.getDepartmentTextFromValue = function(value) { 
  for (i in $scope.departments) {
            if ($scope.departments[i].value==value) {
  return $scope.departments[i].text ;
 }
         }
};



  /****** Add a Item to the list**********/
    $scope.addEmployee = function () {

/*finding max id from exiting to generate new max id for new record*/
$scope.maxId=0;
for (i in $scope.employees) {
            if ($scope.employees[i].id >$scope.maxId) {
  $scope.maxId=$scope.employees[i].id ;
 }
}

        $scope.employees.push({
         id:  $scope.maxId+1,
                        name: $scope.name,
                        age: $scope.age,
                        country: $scope.country,
                        email: $scope.email,
                        gender:$scope.personGender,
         department:$scope.department
        });
    $scope.name='';
    $scope.age='';
   $scope.country='';
   $scope.email ='';        
}


/*********Get Item to Edit from list********** */
$scope.id='';
$scope.editEmployee = function(id) {

/*this id is used at the time of sving edited employee records*/
    $scope.id=id;

    $scope.editorEnabled = true;
    $scope.editablename = $scope.employees[id-1].name;
    $scope.editablecountry= $scope.employees[id-1].country;
    $scope.editableage= $scope.employees[id-1].age;
    $scope.editableemail= $scope.employees[id-1].email; 
   $scope.editablepersonGender= $scope.employees[id-1].gender; 
    $scope.editabledepartment= $scope.employees[id-1].department;
}


/*********Save Edited Records***********/
$scope.saveEmployee = function() { 
                $scope.employees[$scope.id-1].name=$scope.editablename;
                $scope.employees[$scope.id-1].age=$scope.editableage;
                $scope.employees[$scope.id-1].country=$scope.editablecountry;
                $scope.employees[$scope.id-1].email=$scope.editableemail;
 $scope.employees[$scope.id-1].gender=$scope.editablepersonGender;
 $scope.employees[$scope.id-1].department=$scope.editabledepartment; 
 
  $scope.editorEnabled = false;
       }


/*******Cacnel edit operation*********/
$scope.CancelEdit=function(){
  $scope.editorEnabled = false;
}


/*********Delete row from list***********/
$scope.deleteEmployee = function (id) {
        for (i in $scope.employees) {
            if ($scope.employees[i].id == id) {
               if( confirm("This Record will get deleted permanently"))
  {
                     $scope.employees.splice(i, 1);                    
 }
            }
        }
    }

});
</script>


</div>

No comments:

Post a Comment