要添加到Daniel Stucki 的答案ng-repeat
中,您可以等到 ng-repeat 完成后再在父表本身上初始化 FooTable ,而不是每次执行时都添加每一行:
.directive('myDirective', function(){
return function(scope, element){
var footableTable = element.parents('table');
if( !scope.$last ) {
return false;
}
if (! footableTable.hasClass('footable-loaded')) {
footableTable.footable();
}
};
})
这在具有多行的表上可以更好地扩展。
Noteelement
自动成为jQlite/jQuery 对象,因此不再需要用$()
语法包装它。
更新
AngularJS 的优点之一是双向数据绑定。要使 FooTable 数据与最新数据保持同步,您可以执行以下操作:
.directive('myDirective', function(){
return function(scope, element){
var footableTable = element.parents('table');
if( !scope.$last ) {
return false;
}
scope.$evalAsync(function(){
if (! footableTable.hasClass('footable-loaded')) {
footableTable.footable();
}
footableTable.trigger('footable_initialized');
footableTable.trigger('footable_resize');
footableTable.data('footable').redraw();
});
};
})
包装器在scope.$evalAsync
DOM 准备好但在显示之前执行,防止数据闪烁。附加的trigger
andredraw
方法强制初始化的 FooTable 实例在数据更改时更新。
该指令保留了用户体验——任何 FooTable 排序、过滤或分页保持不变——同时在数据更新时无缝加载数据。