如何在ui-grid中实现反映页面内容变化的动态cssclass?
How to achieve dynamic css class in ui-grid that reflects page content changes?
我的目标是在 ui 网格单元格中实现动态 CSS class,最简单的示例是根据单元格的值为性别列着色或显示图标。 CSS classes 将根据页面上的当前数据进行更新,例如。单击一个按钮更新绑定到网格的数据,classes 将被重新计算。
作者和贡献者在动态 CSS classes 上提供了大量示例,例如。 http://brianhann.com/6-ways-to-take-control-of-how-your-ui-grid-data-is-displayed 但是他们只描述了一种在页面加载期间有条件地应用 class 的方法,而我需要的是一种方法来获得将重新应用页面内容更改规则的行为,如上所述基本 angular ng-class 有效。
在 ui-grid 中,您可以在列定义中使用单元格模板或单元格 class 机制,但似乎都不适用于此处:
cellClass: function(grid, row, col, rowRenderIndex, colRenderIndex) {
if (grid.getCellValue(row ,col).toLowerCase() === 'male') {
return 'blue';
}
}
cellTemplate:
'<div ng-class="{ blue: \'{{COL_FIELD.sex}}\' == \'male\',
green: \'{{COL_FIELD.sex}}\' == \'female\'}">
{{ COL_FIELD.first }} {{ COL_FIELD.last }}</div>'
我用这个问题的完整示例创建了一个 plunkr:https://plnkr.co/edit/rob144gVQo6uy1AVuJlS
我还尝试在网格对象和 angular 的 $scope.apply 上调用各种刷新方法,但没有效果。
正确的方法是在单元格模板中通过附加一个函数来使用 grid.appScope 对象:
cellTemplate: '<div ng-class="{ \'my-css-class\': grid.appScope.rowFormatter(row) }"> ... '
其中 rowFormatter 应该是必须附加到控制器范围的二进制函数:
$scope.rowFormatter = function(row) {
return row.entity.gender === 'male';
};
这实际上隐藏在文档示例中:
http://ui-grid.info/docs/#/tutorial/317_custom_templates
您可以在不使用 cellTemplate 的情况下动态设置 cellCss。
您首先必须在代码
的某处注册您的 gridApi
$scope.gridOptions.onRegisterApi = function ( gridApi ) {
$scope.gridApi = gridApi;
}
然后,在数据发生变化的地方添加数据更改通知调用
$scope.gridApi.core.notifyDataChange( uiGridConstants.dataChange.COLUMN );
这基本上会告诉 ui-grid 数据已更改,re-calculate CSS 值。 see here
我的目标是在 ui 网格单元格中实现动态 CSS class,最简单的示例是根据单元格的值为性别列着色或显示图标。 CSS classes 将根据页面上的当前数据进行更新,例如。单击一个按钮更新绑定到网格的数据,classes 将被重新计算。
作者和贡献者在动态 CSS classes 上提供了大量示例,例如。 http://brianhann.com/6-ways-to-take-control-of-how-your-ui-grid-data-is-displayed 但是他们只描述了一种在页面加载期间有条件地应用 class 的方法,而我需要的是一种方法来获得将重新应用页面内容更改规则的行为,如上所述基本 angular ng-class 有效。
在 ui-grid 中,您可以在列定义中使用单元格模板或单元格 class 机制,但似乎都不适用于此处:
cellClass: function(grid, row, col, rowRenderIndex, colRenderIndex) {
if (grid.getCellValue(row ,col).toLowerCase() === 'male') {
return 'blue';
}
}
cellTemplate:
'<div ng-class="{ blue: \'{{COL_FIELD.sex}}\' == \'male\',
green: \'{{COL_FIELD.sex}}\' == \'female\'}">
{{ COL_FIELD.first }} {{ COL_FIELD.last }}</div>'
我用这个问题的完整示例创建了一个 plunkr:https://plnkr.co/edit/rob144gVQo6uy1AVuJlS
我还尝试在网格对象和 angular 的 $scope.apply 上调用各种刷新方法,但没有效果。
正确的方法是在单元格模板中通过附加一个函数来使用 grid.appScope 对象:
cellTemplate: '<div ng-class="{ \'my-css-class\': grid.appScope.rowFormatter(row) }"> ... '
其中 rowFormatter 应该是必须附加到控制器范围的二进制函数:
$scope.rowFormatter = function(row) {
return row.entity.gender === 'male';
};
这实际上隐藏在文档示例中:
http://ui-grid.info/docs/#/tutorial/317_custom_templates
您可以在不使用 cellTemplate 的情况下动态设置 cellCss。
您首先必须在代码
的某处注册您的 gridApi$scope.gridOptions.onRegisterApi = function ( gridApi ) {
$scope.gridApi = gridApi;
}
然后,在数据发生变化的地方添加数据更改通知调用
$scope.gridApi.core.notifyDataChange( uiGridConstants.dataChange.COLUMN );
这基本上会告诉 ui-grid 数据已更改,re-calculate CSS 值。 see here