如何动态更新角度ui-grid列的columnDef

时间:2015-11-06 22:25:33

标签: javascript angularjs angular-ui-grid

所以我面临的问题是我想更新field定义的columnDef属性,以根据传递给指令的某些配置显示不同的值。我有一个愚蠢的版本:

http://plnkr.co/edit/gmjUcQsnIOpqWwkoYiI8?p=preview

点击该插件中的按钮可将电子邮件从actual切换为pretend。它会在范围columnDefs上循环,然后将字段从email.pretend更改为email.actual。更改columnDefs后是否需要某种“刷新”功能?我试过gridApi.core.refresh(),但没有做任何事情。感谢您的任何意见!

2 个答案:

答案 0 :(得分:2)

http://plnkr.co/edit/ujIpJFFGRAwNUKiy0Bnm?p=preview

$scope.otherColumn = {displayName: 'Pretend', field: 'email.pretend'};
//change the field - is this possible???
$scope.changeField = function changeField() {
    $scope.otherColumn = $scope.columnDefs.splice(1, 1, $scope.otherColumn)[0];
}

您只需添加/删除columnDefs数组中的项目即可。

答案 1 :(得分:0)

所以我认为我可以像这样更新我的网格,但通过将数组重新分配给columnsDef就像这样

var a = true;
//change the field - is this possible???
$scope.changeField = function changeField() {
  if (a) {
    $scope.columnDefs = [{ field: 'name' }, {
      displayName: 'Pretend',
      field: 'email.pretend'
    }];
  } else {
    $scope.columnDefs = [{ field: 'name' }, {
      displayName: 'Email',
      field: 'email.actual'
    }];
  }
  a = !a;
};

如果你把它放在plnkr中,你会发现它没有任何效果。

那是因为作业不会改变$ scope.gridApi。 正如@ dave的回答建议你需要从初始化修改原始的columnsDef对象,否则api下的列不会受到影响。我很高兴代码不会克隆api的对象,或者我必须深入到api才能进行此更改。