AngularJs:使用 ag-grid 的 $scope.grid.api.setRowData() 不起作用

Posted

技术标签:

【中文标题】AngularJs:使用 ag-grid 的 $scope.grid.api.setRowData() 不起作用【英文标题】:AngularJs : using ag-grid's $scope.grid.api.setRowData() does not work 【发布时间】:2020-07-19 23:23:24 【问题描述】:

所以,我分叉了this simple ag-grid demo Plunker,分叉的版本是here。

唯一的变化是旧代码为ag-grid 静态分配行数据,而我的fork 尝试使用API​​ 动态分配i。 一世 老:

var rowData = [
    make: "Toyota", model: "Celica", price: 35000,
    make: "Ford", model: "Mondeo", price: 32000,
    make: "Porsche", model: "Boxter", price: 72000
];

// let the grid know which columns and what data to use
var gridOptions = 
    columnDefs: columnDefs,
    rowData: rowData,
    onGridReady: function () 
        gridOptions.api.sizeColumnsToFit();
    
;

新:

  var rowData = [
    
      make: "Toyota",
      model: "Celica",
      price: 35000
    ,
    
      make: "Ford",
      model: "Mondeo",
      price: 32000
    ,
    
      make: "Porsche",
      model: "Boxter",
      price: 72000
    
  ];

  $scope.grid = 
    columnDefs: columnDefs,
    rowData: [],
    rowSelection: 'single'
  ;

$scope.grid.api.setRowData(rowData);

在我的 Plunker 中以及在 localhost 上尝试此操作时,ag-grid 都不会出现。

我做错了什么?


[更新] 我想在用户每次单击按钮时从服务器获取数据,而不仅仅是在网格准备好时,并使用它的 api 分配网格的 rowData。


[更新] 我刚刚在 localhost 上注意到,虽然 $scope.gridOptions 已定义,但 $scope.gridOptions.api 未定义

【问题讨论】:

【参考方案1】:

$scope 设置后不会立即有 grid.api 数据。您必须在 $scope.grid 的 onGridReady 函数中设置数据,如下所示。 https://plnkr.co/edit/qgPae2iGIl1A9i8O?preview

$scope.grid = 
  columnDefs: columnDefs,
  rowData: [],
  rowSelection: 'single',
  onGridReady: function() 
    $scope.grid.api.setRowData(rowData);
  
;

【讨论】:

这就是网格的 API setRowData() 函数的用途(而且更灵活)? Plunker 非常简化,BUT,我想在用户每次单击按钮时从服务器获取数据,而不仅仅是在网格准备好时。你能帮忙吗?谢谢【参考方案2】:

好的,我解决了。这是静态和动态网格之间的区别。见this Plunker。

html 更改为 <div id="myGrid" class="ag-fresh" style="height: 100px;"></div>(删除 ag-grid="grid"),然后在控制器中:

var currentCandidatesGridDiv = document.querySelector('#myGrid');
new agGrid.Grid(currentCandidatesGridDiv, $scope.grid);

$scope.grid.api.setRowData(rowData);

我要求这个帮助a previous question,并且帮助了自己一点 - 只是希望我也帮助了其他人:-)

【讨论】:

以上是关于AngularJs:使用 ag-grid 的 $scope.grid.api.setRowData() 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

AngularJs - 使用“控制器作为”语法的 ag-grid rowData

AngularJs 在 UI 路由器状态视图中向 ag-grid 单元格添加按钮

AngularJs:ui-router 视图中的 ag-grid (templateUrl)

Angularjs ag-grid标题单元格单击事件未触发

将 ag-grid 列绑定到数组

未触发 ag-grid 比较器功能