代码之家  ›  专栏  ›  技术社区  ›  Stephanie Cray

如何使用$scope在UI网格中访问gridApi?

  •  0
  • Stephanie Cray  · 技术社区  · 8 年前

    我正在开发的应用程序要求我访问paginationChanged函数,该函数只有在我将onRegisterApi对象添加到表中的gridOptions时才可用。我需要访问paginationChanged函数,以便随着页面大小的增加更改网格的高度。据我所知,访问gridApi的唯一方法是注入自Angular 1.6及更高版本以来不再使用的$scope。现在我使用的是Angular 1.6,访问html视图上的gridOptions是通过使用ui grid=$ctrl。网格选项。当onRegisterApi对象的一部分不需要使用$scope时,有人知道访问gridApi的方法吗?

    2 回复  |  直到 8 年前
        1
  •  1
  •   Stephanie Cray    8 年前

    在gridOptions对象所在的控制器或服务中,访问gridApi而不使用$scope的方法是确保添加以下属性:appScopeProvider:它允许您设置此对象的名称,我的示例是$ctrl。和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。

        2
  •  0
  •   JC Ford    8 年前

    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