angularjs - 可与 Angular.js 一起使用

标签 angularjs angularjs-directive footable

我正在尝试将 footable( http://themergency.com/footable-demo/responsive-container.htm ) 与 angular.js 一起使用。

enter image description here

随着窗口大小的减小,仅在单击加号时才显示第 3、4、5 列。

Angular.js 提供过滤功能,所以当我输入如下搜索字符串时:

enter image description here

表中的行被过滤。

现在的问题是当我尝试删除此搜索字符串时,如下所示:

enter image description here

所有的行都再次显示,但 UI 被扭曲了。

我试图在 angular.js 中使用

$scope.$watch('searchStringID', function() {
$('#tableId').trigger('footable_initialize');
}

但没有奏效,如果有人可以建议如何解决这个问题。

谢谢。

最佳答案

添加到 Daniel Stucki's answer ,而不是每次添加每个单独的行 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();
    }
  };
})

这在具有多行的表上可以更好地扩展。

备注 element自动成为 jQlite/jQuery object ,因此不再需要将其包装在 $() 中句法。

更新

AngularJS 的优点之一是双向数据绑定(bind)。要使 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 准备好但在显示之前执行,防止数据闪烁。额外的triggerredraw方法强制初始化的 FooTable 实例在数据更改时更新。

该指令保留了用户体验——任何 FooTable 排序、过滤或分页保持不变——同时在数据更新时无缝加载数据。

关于angularjs - 可与 Angular.js 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20243339/

相关文章:

javascript - 从不同框架内的服务访问 AngularJS 服务

javascript - 根据多个条件显示带有 ng-messages 的验证消息

angularjs - 使用指令以 Angular 分割 Controller 逻辑是个好习惯吗?

javascript - AngularJS 动态 TemplateUrl 值

javascript - 仅在调整窗口大小时触发可移动分页

angularjs - 使用 Angular,我应该绑定(bind)到 "domain command"函数(较少抽象)还是 GUI 操作处理函数(更多抽象)?

jquery - 根据产品可用性禁用按钮

AngularJS 指令绑定(bind)具有多个参数的函数

Footable 过滤行 - 获取结果计数

javascript - 按日期列对可脚注行进行排序 (gg/mm/aaaa)