ng-click在ag-grid单元格内没有工作

时间:2016-05-20 08:15:50

标签: angularjs ag-grid

我正在使用ag-grid,我需要在单元格中添加一些自定义链接,并希望在其上调用ng-click功能。这是我的代码

var columnDefs =[
                {headerName: "ID", field: "id"},
                {headerName: "Template Name", field: "user_template_name"},
                {headerName: "Screen", field: "screen_name"},
                {headerName: "Last Uploaded", field: "created_at"},                            
                {headerName: "Manage", cellRenderer: createCustomLinks }
              ];
  var gridOptions = {
                        angularCompileRows:true,
                        columnDefs: columnDefs,
                        rowData: null,
                        enableSorting: true,
                        enableColResize: true,
           };
 var gridDiv = document.querySelector('#myGrid');
 new agGrid.Grid(gridDiv, gridOptions);             
 gridOptions.columnApi.setColumnVisible('id', false);
 gridOptions.api.sizeColumnsToFit();

 function createCustomLinks(params) {
            var cellHtml = '<a ng-click="openTemplateID('+params.data.id+')">Open</a>';

            var domElement = document.createElement("span");
                domElement.innerHTML = cellHtml;

               params.$scope.openTemplateID = function(id){
                  console.log(id);
               }

            return domElement;
          };

我收到以下错误

TypeError: _this.$scope is null
setTimeout(function () { _this.$scope.$apply(); }, 0);  
ag-grid.js (line 7415, col 39)
Error: this.parentScope is null
RenderedRow</RenderedRow.prototype.createChildScopeOrNull

如果我做错了,请指导我。 谢谢。

2 个答案:

答案 0 :(得分:1)

当使用ag-grid和angularJS时,不要这样做:

 var gridDiv = document.querySelector('#myGrid');
 new agGrid.Grid(gridDiv, gridOptions);   

而是在HTML中使用

<div ag-grid="gridOptions"></div> // don't forget having grdOptions bind to $scope

仅此一项就会触发一个新问题:columnApi和api在执行时将是未定义的。要解决此问题,您必须使用onGridReady回调:

gridOptions.onGridReady = function(params){
     gridOptions.columnApi.setColumnVisible('id', false);
     gridOptions.api.sizeColumnsToFit();
}

答案 1 :(得分:1)

我曾经遇到过这个问题。我们需要在网格选项中定义它。将 angularCompileRows 设置为true可以解决此问题

$scope.gridOptions = {
        columnDefs: $scope.columnDefs,
        rowData: $scope.rowData,
        // all other options 
        angularCompileRows: true
    };