0

我正在开发的应用程序要求我访问 paginationChanged 函数,该函数仅在我将 onRegisterApi 对象添加到表中的 gridOptions 时才可用。我需要访问 paginationChanged 函数,以便在 PageSize 增加时更改网格的高度。我知道访问 gridApi 的唯一方法是注入 $scope ,自 Angular 1.6 及更高版本以来不再使用它。现在我正在使用 Angular 1.6 并通过使用 ui-grid= $ctrl.gridOptions 来访问 html 视图上的 gridOptions。有谁知道当 onRegisterApi 对象的一部分时无需使用 $scope 就可以访问 gridApi 的方法?

4

2 回答 2

1

在您的 gridOptions 对象所在的控制器或服务中不使用 $scope 访问 gridApi 的方法是确保添加以下属性: appScopeProvider: 它允许您设置此对象的名称,我的情况是$控制。和 onRegisterApi: 这是允许您访问 gridApi 所必需的。参考http://ui-grid.info/docs/#/api/ui.grid.class:GridOptions

当您使用 appScopeProvider 重置您的 this 对象的名称时,您也在设置 gridApi 的名称。因此,无需使用 $ctrl.gridapi ,您只需要单独使用 $ctrl 即可。所以在我的情况下,解决方案如下:

 var OverViewTable = function ($ctrl) {
     var gridOptions = {
         enableSorting: true,
         enablePagination: true,
         enablePaginationControls: true,
         paginationPageSizes: [50, 100, 200],
         paginationPageSize: 50,
         rowHeight: 60,
         appScopeProvider:$ctrl,
         onRegisterApi: function ($ctrl){
         $ctrl.pagination.on.paginationChanged(null, function(newPage, 
          pageSize){}

我还必须在函数 paginationChanged() 中将通常看到 $scope 的位置设置为 null 作为参数,因为我不想使用 $scope。

于 2017-10-02T17:37:33.367 回答
0

gridApi 对象不会自动添加到您的 $ctrl 中。如果你想要它,你必须自己附上它。

以下是通过 onRegisterApi 回调访问 gridApi 的方法:

$ctrl.gridOptions = {
    onRegisterApi = function(gridApi){

        //Save a reference to the gridApi for later
        $ctrl.gridApi = gridApi;

        //Attach your event handlers
        gridApi.cellNav.on.navigate($scope,function(newRowCol, oldRowCol){
            $log.log('navigation event');
        });

    }
}

http://ui-grid.info/docs/#/api/ui.grid.class:GridApi

于 2017-09-29T17:14:47.523 回答