Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 如何在ng网格中使用ExternalSorting,在sortInfo上使用$watch?_Angularjs_Angularjs Scope_Ng Grid_Angular Ui Grid - Fatal编程技术网

Angularjs 如何在ng网格中使用ExternalSorting,在sortInfo上使用$watch?

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)。这

我的代码中有以下ng网格设置:

$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