angularjs - 动态更改 gridOptions columnDefs

标签 angularjs angular-ui-grid

在下面的 plunkr 中,我希望通过 ajax 调用动态填充性别下拉过滤器,但它似乎不起作用。

plunkr link

如果我注释掉第 17 行

$scope.newSelectOptions=[{"value":"New Item 1","label":"New Item 1"},{"value":"New Item 2","label":"New Item 2"},{"value":"New Item 3","label":"New Item 3"},{"value":"New Item 4","label":"New Item 4"}];

它像我想要的那样工作(只是模拟它),但似乎发生的是 ajax 调用填充了变量 $scope.newSelectOptionscolumnDefs已经被创造了。

我试过改变第 34 行:
selectOptions: $scope.newSelectOptions

到:
selectOptions: newSelectOptions
selectOptions: 'newSelectOptions'
selectOptions: '$scope.newSelectOptions'

但它们都不起作用。

那么我怎样才能动态地改变 selectOptions$scope.gridOptions.columnDefs 中的其他对象动态?

最佳答案

您可以将 Gender 列定义移动到它自己的 js 引用,如下所示,

var genderColumn =  { field: 'gender', filter: { 
          term: '1', 
          type: uiGridConstants.filter.SELECT, 
          //selectOptions: [ { value: '1', label: 'male' }, { value: '2', label: 'female' }, { value: '3', label: 'unknown'}, { value: '4', label: 'not stated' }, { value: '5', label: 'a really long value that extends things' } ]
          selectOptions: []
        }, 
        cellFilter: 'mapGender', headerCellClass: $scope.highlightFilteredHeader };

并在 columnDef 中分配它,如下所示
columnDefs: [
      // default
      { field: 'name', headerCellClass: $scope.highlightFilteredHeader },
      // pre-populated search field
      genderColumn,                               
      // no filter input
      { field: 'company', enableFiltering: false, filter: {
        noTerm: true,
        condition: function(searchTerm, cellValue) {
          return cellValue.match(/a/);
        }
      }},
      // specifies one of the built-in conditions
      // and a placeholder for the input
      {
        field: 'email',
        filter: {
          condition: uiGridConstants.filter.ENDS_WITH,
          placeholder: 'ends with'
        }, headerCellClass: $scope.highlightFilteredHeader
      },
      // custom condition function
      {
        field: 'phone',
        filter: {
          condition: function(searchTerm, cellValue) {
            var strippedValue = (cellValue + '').replace(/[^\d]/g, '');
            return strippedValue.indexOf(searchTerm) >= 0;
          }
        }, headerCellClass: $scope.highlightFilteredHeader
      },
      // multiple filters
      { field: 'age', filters: [
        {
          condition: uiGridConstants.filter.GREATER_THAN,
          placeholder: 'greater than'
        },
        {
          condition: uiGridConstants.filter.LESS_THAN,
          placeholder: 'less than'
        }
      ], headerCellClass: $scope.highlightFilteredHeader},
      // date filter
      { field: 'mixedDate', cellFilter: 'date', width: '15%', filter: {
          condition: uiGridConstants.filter.LESS_THAN,
          placeholder: 'less than',
          term: nextWeek
        }, headerCellClass: $scope.highlightFilteredHeader
      }
    ]

并在 ajax 响应中,当您有新的选择选项时,将其设置在如下所示的性别列上。
genderColumn.filter.selectOptions = [{"value":"New Item 1","label":"New Item 1"},{"value":"New Item 2","label":"New Item 2"},{"value":"New Item 3","label":"New Item 3"},{"value":"New Item 4","label":"New Item 4"}];

http://plnkr.co/edit/2Rbhz4XMSuhjvnO2IrR7?p=preview

关于angularjs - 动态更改 gridOptions columnDefs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30199831/

相关文章:

angularjs - 侧向滚动的 Angular ui-grid 表格

AngularJS : ui grid show multi lines in a cell

javascript - 将 uibmodal 结果返回给父 Controller

javascript - 如何在 AngularJS url 中将字符串添加到主题标签(#)?

javascript - 如何比较对象内的值具有不同序列的数组javascript

javascript - Ng-if 在监视变量变为 false 时不隐藏元素

javascript - 如何使用 AngularJS 禁用单击按钮并将该按钮替换为具有不同功能的另一个按钮?

javascript - e2e 测试 Angular UI 网格的规范方法

javascript - Angular ui-grid - 在列菜单中移动过滤器部分

angularjs - Angular UI Grid 单击行