Angularjs 如何在ng网格中使用ExternalSorting,在sortInfo上使用$watch?
我的代码中有以下ng网格设置:Angularjs 如何在ng网格中使用ExternalSorting,在sortInfo上使用$watch?,angularjs,angularjs-scope,ng-grid,angular-ui-grid,Angularjs,Angularjs Scope,Ng Grid,Angular Ui Grid,我的代码中有以下ng网格设置: $scope.gridOptions = { ... useExternalSorting : false, } $scope.watch('gridOptions.ngGrid.config.sortInfo', function (oldValue, newValue) { console.log(newValue) }) 我还尝试使用sortInfo:undefined和$watch(gridOptions.sortInfo)。这
$scope.gridOptions = {
...
useExternalSorting : false,
}
$scope.watch('gridOptions.ngGrid.config.sortInfo', function (oldValue, newValue) {
console.log(newValue)
})
我还尝试使用
sortInfo:undefined
和$watch(gridOptions.sortInfo)
。这似乎只在网格最初加载时起作用。之后,当我单击标题列时,它似乎没有进入$watch
的回调函数中。我尝试在触发排序的回调函数中放置一个调试器,我可以看到代码使用正确的信息更新sortInfo数组,但是它似乎没有进入watch语句的回调函数中。我的设置有什么错误吗?我有一个与我正在尝试做的事情相似的想法 如果您确实需要查看排序更改,您可以使用以下选项:
//default sorting
$scope.sortOptions = {
sortfield: "name",
sortdir: "DESC"
};
//on sorting event fill out sortOptions in scope
$scope.$on('ngGridEventSorted', function(event, data) {
$scope.sortOptions.sortfield = data.fields[0];
$scope.sortOptions.sortdir = data.directions[0];
});
//when sortOption changes do something
$scope.$watch('sortOptions', function(newVal, oldVal) {
if (newVal !== oldVal) {
console.log("ngGrid Field: " + $scope.sortOptions.sortfield + " - Direction: " + $scope.sortOptions.sortdir);
}
}, true);
它使用sort事件在监视的范围内填写sortinfo,并在其更改时激发
或者,不那么复杂,直接在排序事件上开火,省去自己无聊的观看8-\
//on sorting event do something
$scope.$on('ngGridEventSorted', function(event, data) {
console.log("ngGrid Field: " + data.fields[0] + " - Direction: " +data.directions[0]);
});
我也有同样的问题。我想自己进行服务器端排序,但仍然使用单击列标题时更新的
sortInfo
对象。查看控制台中的一些错误后,我发现我必须设置默认的sortInfo
,如下所示:
$scope.gridOptions={
...
sortInfo:{字段:[],列:[],方向:[]},
useExternalSorting:true
}
我不确定为什么列
字段是必需的,而且它与文档不匹配。我正在使用AngularJSV1.2.19和ng grid v2.0.11。不确定您为什么将useExternalSorting
设置为false
,但无论采用哪种方式,您现在都可以在该字段上设置如下所示的监视:
$scope.$watch('gridOptions.sortInfo',函数(newVal,oldVal){
console.log(newVal);
},对)代码>我得到的外部排序工作与我目前在这里看到的帖子略有不同
$scope.gridOptions = {
paginationPageSize: 100,
enableSorting: true,
useExternalSorting: true,
enableGridMenu: false,
enableColumnMenus: false,
showFooterRow: true,
enableFiltering: true,
useExternalPagination: true,
enableRowSelection: true,
noUnselect: true,
multiSelect: false,
enableRowHeaderSelection: false,
onRegisterApi: function(gridApi) {
$scope.gridApi = gridApi;
gridApi.core.on.sortChanged($scope, (grid, sortColumns) => {
var sortColumn = sortColumns[0].field;
var sortDirection = sortColumns[0].sort.direction;
// then I call a method in my controller which hits my server
// side code and returns external sorting through a linq query
$scope.UpdateGrid(sortColumn, sortDirection );
});
}, //onRegisterApi
}; // gridOptions