2
下面是问题的总结:我设置了一个列sortChange()侦听器,它响应排序更改,通过触发查询来获取新排序的数据。我在提取之前保存网格状态,并在提取后恢复网格状态。问题是,恢复gridState机制会触发原始排序侦听器,导致整个过程重新开始,并且再次重新开始。UI-grid saveState服务循环逻辑
scope.sitesGrid.onRegisterApi = function(gridApi) {
scope.gridApi = gridApi;
scope.gridApi.core.on.sortChanged(scope, function() {
// load new sites on a sort change
scope.initialize();
});
};
scope.initialize = function() {
// save current grid state
scope.gridApi && (scope.gridState = scope.gridApi.saveState.save());
fetchSites().then(function (sites) {
scope.sitesGrid.data = sites
// restore current grid state, but inadvertently retrigger the 'sortChanged' listener
scope.gridApi.saveState.restore(scope,scope.gridState);
})
};
我在想,我就可以建立在每个列标题的点击监听器,而是采用了sortChange监听器,但这个解决方法看起来丑陋和需要去到每一个标题单元格模板并进行修改。