2016-12-07 3 views
0
<div ng-controller="checkBoxController"> 
    <div id="myModal" class="modal fade" role="dialog"> 
     <div class="modal-dialog"> 

     <!-- Modal content--> 
     <div class="modal-content"> 
      <div class="modal-header"> 
      <button type="button" class="close" data-dismiss="modal">&times;</button> 
      <h4 class="modal-title">Modal Header</h4> 
      </div> 
      <div class="modal-body"> 
      <p ng-repeat='(key, val) in employees[0]'> 
       <label> 
       <input ng-model='colSettings[$index]' type="checkbox" />{{ key }}</label> 
      </p> 
      </div> 
      <div class="modal-footer"> 
      <button type="button" class="btn btn-default" data-dismiss="modal" ng-click="saveSelectedColumn()">Close</button> 
      </div> 
     </div> 

     </div> 
    </div> 
    <div class="panel"> 
     <button type="button" class="btn btn-default" ng-click="tableDataReset();">Reset</button> 

     <table class="table-condensed" id="employeeTable" border="1"> 
     <thead> 
      <tr> 
      <th ng-if='colSettings[$index]' ng-repeat='(key, val) in employees[0]' class="name">{{ key }}</th> 
      </tr> 
     </thead> 
     <tbody> 
      <tr ng-repeat="employee in employees"> 
      <td ng-if='colSettings[$index]'>{{employee.name}}</td> 
      <td ng-if='colSettings[$index]'>{{employee.age}}</td> 
      <td ng-if='colSettings[$index]'>{{employee.gender}}</td> 
      </tr> 
     </tbody> 
     </table> 
     <a href="" title="Column Setting" data-toggle="modal" data-target="#myModal">Settings</a> {{ colSettings }} 
    </div> 
    </div> 

var myApp = angular.module('myApp', []); 

myApp.controller('checkBoxController', function($scope) { 
    $scope.employees = [{ 
    name: 'John', 
    age: 25, 
    gender: 'boy' 
    }, { 
    name: 'Jessie', 
    age: 30, 
    gender: 'girl' 
    }]; 

    $scope.colSettings = [true, true, true]; 

    $scope.tableDataReset = function() { 
    $scope.employees = [{ 
     name: 'John', 
     age: 25, 
     gender: 'boy' 
    }, { 
     name: 'Jessie', 
     age: 30, 
     gender: 'girl' 
    }]; 
    }; 
}); 

Имеет список данных таблицы с кнопкой настроек, на которой открывается диалоговое окно модального диалога. В этом модальном диалоговом окне содержится флажок, соответствующий столбцам числа в таблице. Пользователь выбирает любую из флажков & кнопку закрытия, тогда таблица отфильтровывается в зависимости от флажка, который отмечен (то есть флажки, отмеченные только теми столбцами, которые видны в таблице). В настоящее время сохраняется значение true & false для отмеченных & снятых флажков в массиве colSettings. Также при выборе флажка в настоящее время скрываются столбцы, которые я хочу на модальной кнопке закрытия. Используя вышеприведенный код, я могу скрыть th, но не td вместе с его данными.Показать/скрыть столбцы в зависимости от индекса

Следуйте plnk http://plnkr.co/edit/G5bT7G?p=preview

+0

Что у вас есть в saveSelectedColumn? – migueref

+0

В настоящее время checkbox check & undcheck показывает/скрывает столбцы таблицы. Я хочу сделать это при закрытой кнопке наложения i.e saveSelectedColumn(). –

ответ

2

Если у Вас есть больше колонок, динамически обновлять весь

<table class="table-condensed" id="employeeTable" border="1"> 
    <thead> 
     <tr> 
     <th ng-if="val" ng-repeat="(key, val) in colSettings" class="name">{{ key }}</th> 
     </tr> 
    </thead> 
    <tbody> 
     <tr ng-repeat="employee in employees"> 
     <td ng-if="colSettings[key]" ng-repeat="(key,value) in employee">{{value}}</td> 
     </tr> 
    </tbody> 
    </table> 

DEMO

+0

Это работает. Но в моей таблице будет много столбцов, которые в настоящее время включены. Поэтому каждый раз, когда жестко кодировать индекс, это не имеет смысла. Есть ли другая альтернатива ?. Также индекс $ всегда будет указывать текущий индекс, поэтому не знаю, почему это проблема. –

+0

Вы используете индекс сотрудника, а не индекс для столбцов, вот вопрос – migueref

+0

@migueref ok. Есть ли способ достичь этого? –

0

Я предпочитаю делать это динамическим, так что не существует никаких требований вы должны помнить индексы

var myApp = angular.module('myApp', []); 
 

 
myApp.controller('checkBoxController', function($scope) { 
 
    $scope.employees = [{ 
 
    name: 'John', 
 
    age: 25, 
 
    gender: 'boy' 
 
    }, { 
 
    name: 'Jessie', 
 
    age: 30, 
 
    gender: 'girl' 
 
    }]; 
 
$scope.getColSettingForRow = function(key){ 
 
\t var keys = Object.keys($scope.employees[0]); 
 
\t var index = keys.indexOf(key); 
 
\t return index; 
 
} 
 
    $scope.colSettings = [true, true, true]; 
 

 
    $scope.tableDataReset = function() { 
 
    $scope.employees = [{ 
 
     name: 'John', 
 
     age: 25, 
 
     gender: 'boy' 
 
    }, { 
 
     name: 'Jessie', 
 
     age: 30, 
 
     gender: 'girl' 
 
    }]; 
 
    }; 
 
});
<!DOCTYPE html> 
 
<html ng-app="myApp"> 
 

 
<head> 
 
    <meta charset="utf-8" /> 
 
    <title>AngularJS Plunker</title> 
 
    <script> 
 
    document.write('<base href="' + document.location + '" />'); 
 
    </script> 
 
    <link rel="stylesheet" href="style.css" /> 
 
    <script data-require="[email protected]" src="https://code.angularjs.org/1.4.12/angular.js" data-semver="1.4.9"></script> 
 
    <script src="app.js"></script> 
 
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"> 
 

 
    <!-- jQuery library --> 
 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> 
 

 
    <!-- Latest compiled JavaScript --> 
 
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> 
 
</head> 
 

 
<body> 
 
    <div ng-controller="checkBoxController"> 
 
    <div id="myModal" class="modal fade" role="dialog"> 
 
     <div class="modal-dialog"> 
 

 
     <!-- Modal content--> 
 
     <div class="modal-content"> 
 
      <div class="modal-header"> 
 
      <button type="button" class="close" data-dismiss="modal">&times;</button> 
 
      <h4 class="modal-title">Modal Header</h4> 
 
      </div> 
 
      <div class="modal-body"> 
 
      <p ng-repeat='(key, val) in employees[0]'> 
 
       <label> 
 
       <input ng-model='colSettings[$index]' type="checkbox" />{{ key }}</label> 
 
      </p> 
 
      </div> 
 
      <div class="modal-footer"> 
 
      <button type="button" class="btn btn-default" data-dismiss="modal" ng-click="saveSelectedColumn()">Close</button> 
 
      </div> 
 
     </div> 
 

 
     </div> 
 
    </div> 
 
    <div class="panel"> 
 
     <button type="button" class="btn btn-default" ng-click="tableDataReset();">Reset</button> 
 
    
 
     <table class="table-condensed" id="employeeTable" border="1"> 
 
     <thead> 
 
      <tr> 
 
      <th ng-if='colSettings[$index]' ng-repeat='(key, val) in employees[0]' class="name">{{ key }}</th> 
 
      </tr> 
 
     </thead> 
 
     <tbody> 
 
      <tr ng-repeat="employee in employees"> 
 
      <td ng-if='colSettings[getColSettingForRow("name")]'>{{employee.name}}</td> 
 
      <td ng-if='colSettings[getColSettingForRow("age")]'>{{employee.age}}</td> 
 
      <td ng-if='colSettings[getColSettingForRow("gender")]'>{{employee.gender}}</td> 
 
      </tr> 
 
     </tbody> 
 
     </table> 
 
     <a href="" title="Column Setting" data-toggle="modal" data-target="#myModal">Settings</a> {{ colSettings }} 
 
    </div> 
 
    </div> 
 
</body> 
 

 
</html>

+0

У меня есть ключи id & created date, а также в моем json-объекте, но вам нужно их игнорировать при применении повторного включения в списке и списке таблиц. Это возможно? –

+0

Если вы хотите скрыть их. Просто игнорируйте их при флажке, и это нормально. Это будет работать. Если вам нужен правильный ответ. Пожалуйста, пришлите мне образец, чтобы я мог его проверить. –

0

Я буду объяснять альтернативу. Вы должны сделать ng-repeat для colSettings, потому что вы используете индекс для сотрудников, поэтому он не работает.

Если вы записываете все colSettings со значением boolean, например, вы можете показать или скрыть это значение, но вы будете использовать индекс colSettings, потому что в вашем повторном ng вам будет проходить цикл через colSetting, и вы можете распечатать значения для видимых столбцов.

+0

Вы можете задать вопрос для получения дополнительной информации, если у вас есть вопрос – migueref

+0

Невозможно получить его. Возможно ли реализовать и показать? –

Смежные вопросы