12

Im trying to Learn AngularJS and im implementing this Checkboxes that when i some checkboxes from the Grid and click the Remove Button then the Data from Table Should Be removed of Selected CheckBoxes.

I tried but cant figure out how to implement it.

Please see my this code on Plunker. http://plnkr.co/edit/e7r65Me4E7OIWZ032qKM?p=preview

It would be nice, if you fork and Give Working Example of the Above Plunker.

1 Answer 1

20

An easy way would be to change your students list to:

$scope.students = [
  {Rollno: "1122",Name: "abc",Uni: "res", selected: false},
  {Rollno: "2233",Name: "def",Uni: "tuv", selected: false},
  {Rollno: "3344",Name: "ghi",Uni: "wxy", selected: false}
];

with:

<input type="checkbox" ng-model="student.selected">

in the view. With injecting filter into the controller, you can then rewrite the remove function to:

$scope.remove = function(){
  $scope.students = filterFilter($scope.students, function (student) {
    return !student.selected;
  });
};

here is full code:

(function (app, ng) {
  'use strict';

  app.controller('TableCtrl', ['$scope', 'filterFilter', function($scope, filterFilter) {
    $scope.students = [
      {Rollno: "1122",Name: "abc",Uni: "res", selected: false},
      {Rollno: "2233",Name: "def",Uni: "tuv", selected: false},
      {Rollno: "3344",Name: "ghi",Uni: "wxy", selected: false}
    ];

    $scope.save = function(){
      $scope.students.push({
        Rollno: $scope.new_rollno,
        Name: $scope.new_name,
        Uni: $scope.new_uni
      });

      $scope.new_rollno = $scope.new_name = $scope.new_uni = '';
    };

    $scope.remove = function(){
      $scope.students = filterFilter($scope.students, function (student) {
        return !student.selected;
      });
    };
  }]);
}(angular.module('app', []), angular));
/* Styles go here */

table
{
  width: 100%;

}
table,th,td
{
  border: 1px solid black;
}
.color
{
  background-color: lightgray;
}
.color2
{
  background-color: white;
}
#heading
{
  background-color: black;
  color: white;
}
tr:hover
{

  background-color:darkblue;
  color: white;
  font-weight: bold;
}
#images img
{

  margin-top: 10px;
}
#img1
{
  width: 33.4%;
}
#img2
{
  width: 66%;
  height: 255px;
}
#table1
{
  margin-top: 10px;
}
label
{
  display: block;
  margin-bottom: 5px;
  margin-top: 5px;
}
button
{
  margin-top: 5px;
  padding: 5px;
}
<!DOCTYPE html>
<html ng-app="app">
<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.1.5/angular.min.js"></script>
<meta charset=utf-8 />
<title>JS Bin</title>
</head>
<body>
    <div>
      <label>Search:</label>
      <input type="search" ng-model="search" placeholder="Enter to Search">
    </div>

    <div id="table1" ng-controller="TableCtrl">
      <table cellpadding="0" border="0" cellspacing="0">
        <tr id="heading">
          <th>Roll NO:</th>
          <th>Student Name:</th>
          <th>University:</th>
        </tr>

        <tr class="color2" ng-repeat="student in students | filter:search | filter:new_search">
          <td>{{student.Rollno}} <input type="checkbox" ng-model="student.selected"> </td>
          <td>{{student.Name}}</td>
          <td>{{student.Uni}} <button ng-click="remove($index)">x </button></td>
        </tr>
      </table>

      <div>
        <label>Rollno:</label>
        <input type="number" ng-model="new_rollno"> <br>
        <label>Name:</label>
        <input type="text" ng-model="new_name"><br>
        <label>University:</label>
        <input type="text" ng-model="new_uni"><br>
        <button ng-click="save()">Save</button>
      </div>

      <div style="float: right; margin-right: 300px;margin-top: -200px;">
        <button ng-click="remove($index)">Remove</button>
      </div>
    </div>
</body>
</html>

Sign up to request clarification or add additional context in comments.

4 Comments

Yoshi your solution seems to be perfect but it is better of not assign $scope.students to a new value in remove function because then it will recreate all the ng-repeat elements from scratch so it is better of just splicing the elements from students array to avoid recreating ng-repeat all over again.
@Ajaybeniwal Please Can you Explain How to do this with Splice in other Answer?
@Ajaybeniwal You're right. Tough personally I would first wait for the redraw to become a real problem (as this greatly depends on the amount of data). Until then, I would use filter for it's self-descriptiveness alone.
Also, with the new v1.2 feature of track by, the whole problem of redrawing all entries should become obsolete.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.