【问题标题】:ngTable how to set filter-data for a table data cell programmaticallyngTable如何以编程方式为表格数据单元格设置过滤器数据
【发布时间】:2014-11-05 09:36:41
【问题描述】:

我正在使用 ngTable 并异步加载表,但其中一列正在使用选择过滤器,当它被调用时,表数据尚未解析。最初我使用本地 JSON 对象测试 ngTable 并且这有效,但现在我不确定如何填充选择。是否可以以编程方式设置列的过滤数据以填充选择字段?

ng表格单元格

<td data-title="'Status'" 
    sortable="'status'" 
    filter="{ 'status': 'select' }"
    filter-data="getStatus()"  // hasn't resolved yet and select is empty
    ng-bind="doc.status"></td>

控制器功能

$scope.getStatus = function() {

    var def = $q.defer();
    var arr = [];
    var status = [];

    // NOTE: RestService.getPackages() below isn't resolved and select is empty

    angular.forEach( RestService.getPackages(), function( item ) {

        // Check if status already exists
        if( arr.indexOf( item.status ) === -1 ) {

            // Store status for comparison to avoid duplicates
            arr.push( item.status );

            // Store status information for filtering
            status.push({
                'id': item.status,
                'title': item.status
            });
        }
    });

    def.resolve( status );

    return def;
};

【问题讨论】:

  • 你能在 plunk 中重现 bug,使用计时器来模拟网络延迟吗?
  • 您使用的是angular promises 还是q promises?和RestService.getPackages() 回报承诺,不是吗?

标签: javascript angularjs angular-promise ngtable


【解决方案1】:

我认为promise链接中的问题是由于RestService.getPackages()的调用,你应该通过回调更明确地做到这一点,这里是我的小例子:

$scope.getData = function() {
    var def = $q.defer();
    var Names = [];

    //simulate  network delay
    $timeout(function(){

      Names.push({
         title: "Enos",
        id: "Enos"});
      Names.push({
         title: "Nephi",
        id: "Nephi"});

    }, 1000);

    def.resolve(Names);
    return def;
  };

在这里工作example

【讨论】:

    猜你喜欢
    • 2016-11-30
    • 1970-01-01
    • 2017-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-09
    • 1970-01-01
    相关资源
    最近更新 更多