我创建了一个带验证的UI网格。我添加一个空行供用户填写。看起来验证仅在编辑时发生。似乎有效的是,空行不会从一开始就标记验证,因为用户尚未与该单元进行任何交互 - 但是如果用户开始编辑单元格 - 但随后决定不进行 - 则验证仍然不会发生
我想支持两种情况:
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 :(得分:1)
要支持第二个senario,您应该添加一个自定义的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);
});
};
答案 1 :(得分:0)
如果您需要为新行或现有行执行此操作,则可以手动设置无效状态。
uiGridValidateService.setInvalid(dataRow, coldef);
您可以使用以下方式获取colDef:
$scope.gridApi.grid.getColDef("columnName")
答案 2 :(得分: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);
});