智能 table 列 show/hide 切换
smart table column show/hide toggle
我是 AngularJS 和 SmartTable 的新手...我目前正在尝试让 SmartTable 对列进行 show/hide 切换。据我所知,SmartTable 不会这样做,所以我正在使用 ng-Grid show/hide 功能......试图遵循这个解决方案:
how to hide/show ng-grid column externally?
当我实施此解决方案时,我的列没有显示。
如何在初始设置时将 smartTable 列设置为 "show"?我想这就是我所缺少的...
这是我的 js:
var app = angular.module('myApp', ['smart-table', 'ngGrid']);
app.controller('paginationCtrl', ['$scope', function (scope) {
var nameList = ['Brian', 'Bob', 'Marie', 'Jennifer', 'Frank'],
familyName = ['Smith', 'Miller', 'Patel', 'Jefferson', 'Mendez'];
...
$scope.toggleCol= function(i) {
$scope.gridOptions.$gridScope.columns[i].toggleVisible()
}
scope.itemsByPage=15;
scope.rowCollection = [];
for (var j = 0; j < 200; j++) {
scope.rowCollection.push(createRandomItem());
}
}]);
这是我的 html:
<body ng-controller="paginationCtrl">
<p>Smart Table Example</p>
<input type="button" value="First Name" ng-click="toggleCol(0)" />
<table class="table table-striped" st-table="rowCollection">
<thead>
<tr>
<th st-sort="firstName">first name</th>
<th st-sort="lastName">last name</th>
<th st-skip-natural="true" st-sort="balance">balance</th>
<th>email</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="row in rowCollection">
<td>{{row.firstName}}</td>
<td>{{row.lastName}}</td>
<td>{{row.balance}}</td>
<td>{{row.email}}</td>
</tr>
</tbody>
<tfoot>
<tr>
<td class="text-center" colspan="5">
<div st-displayed-pages="7" st-items-by-page="itemsByPage" st-pagination=""></div>
</td>
</tr>
</tfoot>
</table>
您可以在我的 plunker 示例中看到我的整个设置:
http://plnkr.co/edit/6F8NsDdgaWranTXeIQuV?p=preview
谢谢!!
以防其他人试图这样做,我最终没有去 ngGrid 路线。我能够使用按钮和 ng-hide 来完成我想要的。
对于我的 html 我这样做了:
<button ng-click="firstNameToggle = !firstNameToggle" type="button" class="btn btn-primary">First Name</button>
<button ng-click="lastNameToggle = !lastNameToggle" type="button" class="btn btn-info">Last Name</button>
<button ng-click="balanceToggle = !balanceToggle" type="button" class="btn btn-default">Balance</button>
<button ng-click="emailToggle = !emailToggle" type="button" class="btn btn-success">Email</button>
</div>
<table class="table table-hover table-striped" st-table="rowCollection">
<thead>
<tr>
<th ng-hide="firstNameToggle" st-sort="firstName">first name</th>
<th ng-hide="lastNameToggle"st-sort="lastName">last name</th>
<th ng-hide="balanceToggle"st-skip-natural="true" st-sort="balance">balance</th>
<th ng-hide="emailToggle">email</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="row in rowCollection">
<td ng-hide="firstNameToggle">{{row.firstName}}</td>
<td ng-hide="lastNameToggle">{{row.lastName}}</td>
<td ng-hide="balanceToggle">{{row.balance}}</td>
<td ng-hide="emailToggle">{{row.email}}</td>
</tr>
</tbody>
和我的 js:
app.controller('basicsCtrl', ['$scope', function (scope) {
scope.rowCollection = [
{firstName: 'Laurent', lastName: 'Renard', birthDate: new Date('1987-05-21'), balance: 102, email: 'whatever@gmail.com'},
{firstName: 'Blandine', lastName: 'Faivre', birthDate: new Date('1987-04-25'), balance: -2323.22, email: 'oufblandou@gmail.com'},
{firstName: 'Francoise', lastName: 'Frere', birthDate: new Date('1955-08-27'), balance: 42343, email: 'raymondef@gmail.com'}
];
scope.getters={
firstName: function (value) {
//this will sort by the length of the first name string
return value.firstName.length;
}
}
scope.firstNameToggle = "false";
scope.lastNameToggle = "false";
scope.balanceToggle = "false";
scope.emailToggle = "false";
}]);
我知道这已经过时了,但我写了这个指令来解决它。
它一个人做。
如果您想要一个更动态的解决方案,我建议您使用这样的列对象数组:
$scope.columns=[{name: 'firstName', template: 'template1.html'}, {name: 'lastName', template: 'template2.html' }];
并且您在智能 table 正文中呈现这些列:
<tbody>
<tr ng-repeat="row in rowCollection">
<td ng-repeat="col in columns">
<div ng-include src="col.template"></div>
</td>
</tr>
</tbody>
我有一个 plunker 示例,当我定义列数组并为每列设置模板文件时。这个也有使用 lrDragNDrop 的拖放功能。
我是 AngularJS 和 SmartTable 的新手...我目前正在尝试让 SmartTable 对列进行 show/hide 切换。据我所知,SmartTable 不会这样做,所以我正在使用 ng-Grid show/hide 功能......试图遵循这个解决方案: how to hide/show ng-grid column externally?
当我实施此解决方案时,我的列没有显示。
如何在初始设置时将 smartTable 列设置为 "show"?我想这就是我所缺少的...
这是我的 js:
var app = angular.module('myApp', ['smart-table', 'ngGrid']);
app.controller('paginationCtrl', ['$scope', function (scope) {
var nameList = ['Brian', 'Bob', 'Marie', 'Jennifer', 'Frank'],
familyName = ['Smith', 'Miller', 'Patel', 'Jefferson', 'Mendez'];
...
$scope.toggleCol= function(i) {
$scope.gridOptions.$gridScope.columns[i].toggleVisible()
}
scope.itemsByPage=15;
scope.rowCollection = [];
for (var j = 0; j < 200; j++) {
scope.rowCollection.push(createRandomItem());
}
}]);
这是我的 html:
<body ng-controller="paginationCtrl">
<p>Smart Table Example</p>
<input type="button" value="First Name" ng-click="toggleCol(0)" />
<table class="table table-striped" st-table="rowCollection">
<thead>
<tr>
<th st-sort="firstName">first name</th>
<th st-sort="lastName">last name</th>
<th st-skip-natural="true" st-sort="balance">balance</th>
<th>email</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="row in rowCollection">
<td>{{row.firstName}}</td>
<td>{{row.lastName}}</td>
<td>{{row.balance}}</td>
<td>{{row.email}}</td>
</tr>
</tbody>
<tfoot>
<tr>
<td class="text-center" colspan="5">
<div st-displayed-pages="7" st-items-by-page="itemsByPage" st-pagination=""></div>
</td>
</tr>
</tfoot>
</table>
您可以在我的 plunker 示例中看到我的整个设置:
http://plnkr.co/edit/6F8NsDdgaWranTXeIQuV?p=preview
谢谢!!
以防其他人试图这样做,我最终没有去 ngGrid 路线。我能够使用按钮和 ng-hide 来完成我想要的。 对于我的 html 我这样做了:
<button ng-click="firstNameToggle = !firstNameToggle" type="button" class="btn btn-primary">First Name</button>
<button ng-click="lastNameToggle = !lastNameToggle" type="button" class="btn btn-info">Last Name</button>
<button ng-click="balanceToggle = !balanceToggle" type="button" class="btn btn-default">Balance</button>
<button ng-click="emailToggle = !emailToggle" type="button" class="btn btn-success">Email</button>
</div>
<table class="table table-hover table-striped" st-table="rowCollection">
<thead>
<tr>
<th ng-hide="firstNameToggle" st-sort="firstName">first name</th>
<th ng-hide="lastNameToggle"st-sort="lastName">last name</th>
<th ng-hide="balanceToggle"st-skip-natural="true" st-sort="balance">balance</th>
<th ng-hide="emailToggle">email</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="row in rowCollection">
<td ng-hide="firstNameToggle">{{row.firstName}}</td>
<td ng-hide="lastNameToggle">{{row.lastName}}</td>
<td ng-hide="balanceToggle">{{row.balance}}</td>
<td ng-hide="emailToggle">{{row.email}}</td>
</tr>
</tbody>
和我的 js:
app.controller('basicsCtrl', ['$scope', function (scope) {
scope.rowCollection = [
{firstName: 'Laurent', lastName: 'Renard', birthDate: new Date('1987-05-21'), balance: 102, email: 'whatever@gmail.com'},
{firstName: 'Blandine', lastName: 'Faivre', birthDate: new Date('1987-04-25'), balance: -2323.22, email: 'oufblandou@gmail.com'},
{firstName: 'Francoise', lastName: 'Frere', birthDate: new Date('1955-08-27'), balance: 42343, email: 'raymondef@gmail.com'}
];
scope.getters={
firstName: function (value) {
//this will sort by the length of the first name string
return value.firstName.length;
}
}
scope.firstNameToggle = "false";
scope.lastNameToggle = "false";
scope.balanceToggle = "false";
scope.emailToggle = "false";
}]);
我知道这已经过时了,但我写了这个指令来解决它。 它一个人做。
如果您想要一个更动态的解决方案,我建议您使用这样的列对象数组:
$scope.columns=[{name: 'firstName', template: 'template1.html'}, {name: 'lastName', template: 'template2.html' }];
并且您在智能 table 正文中呈现这些列:
<tbody>
<tr ng-repeat="row in rowCollection">
<td ng-repeat="col in columns">
<div ng-include src="col.template"></div>
</td>
</tr>
</tbody>
我有一个 plunker 示例,当我定义列数组并为每列设置模板文件时。这个也有使用 lrDragNDrop 的拖放功能。