我找到了一种方法来使用 isColumnResizing 属性上的手表来做到这一点:
$scope.$watch('gridOptions.$gridScope.isColumnResizing', function (newValue, oldValue) {
if (newValue === false && oldValue === true) { //on stop resizing
$scope.ColResizeHandler($scope.gridOptions.$gridScope.columns);
}
}, true);
然后我可以在我创建的调整大小处理程序中调整列的大小:
$scope.ColResizeHandler = function (columns) {
var origWidth;
var col1 = undefined;
var col2 = undefined;
var widthcol2;
var found = false;
var widthDiff = 0;
angular.forEach(columns, function (value) {
if (col2 == undefined && value.visible) {
if (found) {
origWidth += value.width;
col2 = value;
colSizeLimits(col2, widthDiff);
found = false;
}
if (value.origWidth != undefined && value.origWidth != value.width && col2 == undefined) {
found = true;
col1 = value;
widthDiff = value.width - value.origWidth;
origWidth = value.origWidth;
}
}
});
if (col2 == undefined) {
//this was the last visible column - don't allow resizing
col1.width = origWidth;
}
else {
//ensure limits haven't been blown to cope with reizing
if (col1.width + col2.width != origWidth) {
var diff = (col1.width + col2.width) - origWidth;
colSizeLimits(col1, diff);
}
}
col1.origWidth = col1.width;
col2.origWidth = col2.width;
}
这有两个问题。
1 - 如果您调整列大小并将其拖动到网格之外(即一直越过和离开 ng-grid 可视区域),当您停止拖动并释放调整大小时,isColumnResizing 监视不会执行。 (我认为这可能是 ng-grid 中的一个错误,因为它确实将列的大小调整到您拖动调整器的位置,即使它在网格可视区域之外,它也不会触发监视代码)。
2 - 如果你避免这个问题并且只是在可视网格区域内拖动,那么列将调整大小,但只有在你完成拖动调整器之后,所以 ui 看起来有点有趣(即,如果我展开一列然后是相邻列在我单击调整大小并停止拖动之前不会缩小)。
我将致力于解决这些问题,并将发布我发现的任何更新/修复。