使用单元格导航在Uigrid中传递过滤器参数时出错

时间:2015-10-12 18:59:29

标签: angularjs angular-ui-grid angular-filters

我有一个带有ui-grid-cellnav指令的可编辑Uigrid,可以在焦点上进行编辑。我还有一个过滤器,用于在下拉列表中显示值而不是id。

<div ui-grid="gridOptions" ui-grid-edit ui-grid-cellnav class="grid"></div>

JS

$scope.gridOptions.columnDefs = [
{ name:'name', width:100 },
{ name:'age', width:100},
{ name: 'gender', displayName: 'Gender', editableCellTemplate: 'ui-grid/dropdownEditor', width: '20%',
  cellFilter: "griddropdown:this", editDropdownIdLabel:'id',
  editDropdownValueLabel: 'gender', editDropdownOptionsArray: [
  { id: 1, gender: 'male' },
  { id: 2, gender: 'female' }
] }
];

每当修改下拉列值时都会发生错误。看起来filter参数是作为字符串而不是实际对象传递的,但不确定原因。如果我删除cellnav指令,则工作正常。

Plnkr

提前致谢!

1 个答案:

答案 0 :(得分:1)

有趣的是,我玩了一下它看起来你得到了想要的结果,偶尔ui-grid喜欢传递一个字符串作为参数而不是对象。

如果你在过滤器中添加一个字符串检查,看起来你仍然会得到想要的结果,如果我理解正确的话:

要添加的字符串检查:

if (typeof context !== 'string') {}

完整过滤:

.filter('griddropdown', function() {
    return function (input, context) {
        if (typeof context !== 'string') {
            var map = context.col.colDef.editDropdownOptionsArray;
            var idField = context.col.colDef.editDropdownIdLabel;
            var valueField = context.col.colDef.editDropdownValueLabel;
            var initial = context.row.entity[context.col.field];
            if (typeof map !== "undefined") {
                for (var i = 0; i < map.length; i++) {
                    if (map[i][idField] == input) {
                        return map[i][valueField];
                    }
                }
            } else if (initial) {
                return initial;
            }  
         }
         return input;
     };
 });