2016-01-24 52 views
1

我创建了一个带有验证的UI网格。我追加一个空行给用户填写。它看起来像验证只发生在编辑。这似乎是有效的,因为用户还没有与单元格进行任何交互 - 但是如果用户开始编辑单元格 - 但是然后决定不这样做 - 空行仍然不会发生验证。没有编辑的角度UI网格验证

有两种情况,我想支持:

  1. 一个空的“新”行
    • 没有视觉验证失败
    • 用户启动编辑 - 但后来点击了未做任何更改
    • 验证失败可见
  2. An现有行是无效
    • 与负载数据未通过验证
    • 验证失败是立即可见,无需任何用户交互

Plunker:http://plnkr.co/edit/cb9Vb9b4iTC8z4haahbL?p=preview

$scope.gridOptions.columnDefs = [ 
    { name: 'id', 
     enableCellEdit: false, 
     width: '10%' 
    }, 
    { name: 'name', 
     displayName: 'Name', 
     width: '20%', 
     validators: { 
     required: true, 
     startWith: 'M' 
     }, 
     cellTemplate: 'ui-grid/cellTitleValidator' 
    }, 
    { name: 'gender', 
     displayName: 'Gender', 
     width: '20%', 
     validators: { 
     required: true 
     }, 
     cellTemplate: 'ui-grid/cellTitleValidator' 
    } 
    ]; 

回答

0

如果您需要为新行或现有行执行此操作,您可以手动设置无效状态。

uiGridValidateService.setInvalid(dataRow, coldef); 

可以使用得到colDef:

$scope.gridApi.grid.getColDef("columnName") 
1

为了支持第二塞纳里奥你应该添加自定义onRegisterApi听众在里面添加上呈现的听众,然后运行验证程序呈现这样的每一行的行:

$scope.gridOptions.onRegisterApi = function (gridApi) { 
    //set gridApi on scope 
    $scope.gridApi = gridApi; 
    $scope.gridApi.core.on.rowsRendered($scope, function() { 
     $interval(function() { 
      var rowsRendred = $scope.gridApi.grid.renderContainers.body.renderedRows; 
      rowsRendred.forEach(function (row) { 
       row.grid.options.columnDefs.forEach(function (colDef) { 
        $scope.gridApi.grid.validate.runValidators(row.entity, colDef, row.entity[colDef.field], NaN, $scope.gridApi.grid); 
       }); 
      }); 
     }, 500, 1); 
    }); 
}; 
0

这类似于Afifa的答案,但更高的性能,当你的许多列不进行验证:

将以下内容添加到您的onRegisterApi:

$scope.gridApi.core.on.rowsRendered($scope, function() { 
       $interval(function() { 
        var rowsRendred = 
    $scope.gridApi.grid.renderContainers.body.renderedRows; 
        var validatedColumns = []; 
        rowsRendred[0].grid.options.columnDefs.forEach(function (colDef) { 
         if (typeof (colDef.validators) != 'undefined') { 
          validatedColumns.push(colDef); 
         } 
        }); 
        rowsRendred.forEach(function (row) { 
         validatedColumns.forEach(function (colDef) { 

$scope.gridApi.grid.validate.runValidators(row.entity, colDef, row.entity[colDef.field], NaN, $scope.gridApi.grid); 
         }); 
        }); 
       }, 500, 1); 
      });