使用 ng-hide 切换表中的列,其中 colRessize 可调整大小
Toggle columns in a table with colResizable using ng-hide
我创建了一个简单的指令,该指令利用colRessizeable插件,该插件在呈现后简单地激活表上的插件:
app.directive("columnResizable", this.columnResizable = function($timeout) {
return {
restrict: "A",
link: function(scope, element, attrs) {
// Initialize colResizable plugin after DOM
$timeout(function() {
element.colResizable({
liveDrag:true,
postbackSafe: true,
partialRefresh: true,
minWidth: 100
});
});
}
}
});
该指令工作正常,直到我需要添加一个功能来隐藏和显示表中的列。我使用 ng-hide 并通过更改 localStorage 布尔变量来打开或关闭列。如果我从"全部显示"状态开始,列会按预期隐藏/显示。但拒绝显示我是否从隐藏状态开始:
<button class="btn btn-default"
ng-class="{active: emailHidden}"
ng-click="emailHidden = !emailHidden">Hide Email</button>
<table column-resizable class="table table-bordered table-striped">
<thead>
<tr>
<th>Name</th>
<th ng-hide="emailHidden">Email</th>
</tr>
</thead>
<tbody ng-if="!scheduleEntries || scheduleEntries.length == 0">
<tr>
<td>Foo Bar</td>
<td ng-hide="emailHidden">foo@bar.com</td>
</tr>
</tbody>
</table>
我创建了一个带有常规布尔变量的 plunker。如果将 $scope.emailHidden 变量更改为"开始隐藏",则可以看到单击该按钮时不会显示"电子邮件"列:http://plnkr.co/edit/Y20BH2
我最终在指令中为 emailHidden 变量添加了一个观察程序,一旦更改,它就会重置列宽并重新初始化 colRessize 插件:
scope.$watch('emailHidden', function(newVal) {
element.find('th').css('width','auto');
$timeout(function() {
element.colResizable({
liveDrag:true,
postbackSafe: true,
partialRefresh: true,
minWidth: 100
});
});
});
更新的普伦克
如果有人有更好的方法来解决这个问题,我将不胜感激。最好是不涉及$watch
当$scope.emailHidden
值设置为 true 时,ColResizer 将第二列的宽度更新为零。即使在 emailHidden
标志设置为 false 之后,此宽度也不会更新。由于在这种情况下第二列没有任何宽度,因此我们无法在屏幕上看到它。
相关文章:
- 使用jQuery动态添加表并在其中动态添加行
- 匹配一个单词,其中候选人可以跨越顺序组(跨度)
- 访问嵌套JSON对象的键,其中键是动态的
- 如何在javascript中获取一年中的周数,其中周日是一周中的第一天
- 其中的用例标签'的声明
- PayPal按钮是否有一个简单的选项,其中金额基于一些用户输入
- Knockout observable没有观察到其中一个属性
- 将其中一个异步方法重写为使用promise的方法
- 我有多个复选框,并希望为其中 2 个制定规则,以便如果我选择 1 个,则无法选择另一个
- 查找对象数组是否包含其中一个标记的最快方法
- 其中是自定义函数中的属性
- Javascript未在其中一个变量上输出0
- 在lodash上有没有一个替代方案.merge.apply(_,x);其中x是对象的数组
- Javascript获取url并通过添加到其中进行重定向
- 如何将数组附加到下拉导航栏并禁用其中的一个选项
- Regex表示10位数字,其中没有't允许所有零、所有单个no和序列号
- 页面上的2个表单带有JS验证-其中一个抛出电子邮件验证错误
- 需要一个用于AJAX的Javascript库,其中包含多部分/表单数据
- 其中是函数Empty(){}
- 使用 ng-hide 切换表中的列,其中 colRessize 可调整大小