我使用AngularJS 1.7和ag-grid 18.0.1。

当我将angularCompileRows设置为true时,控制台中出现此错误:

Uncaught TypeError: Cannot read property '$apply' of null
at eval (rowRenderer.js:586)

这是对应的代码(这是agGrid代码):
RowRenderer.prototype.checkAngularCompile = function () {
    var _this = this;
    // if we are doing angular compiling, then do digest the scope here
    if (this.gridOptionsWrapper.isAngularCompileRows()) {
        // we do it in a timeout, in case we are already in an apply
        setTimeout(function () {
            _this.$scope.$apply();
        }, 0);
    }
};

这是我的选择:
const gridOptions = {
            rowData: null,
            columnDefs: [...],
            enableColResize: true,
            onColumnResized: (params) => {
            angularCompileRows: true,
            suppressCellSelection: true,
            enableSorting: true,
            enableServerSideSorting: true,
            rowModelType: 'infinite',
            pagination: true,
            paginationPageSize: 10,
            unSortIcon: true,
            suppressPaginationPanel: true,
            suppressHorizontalScroll: true,
            onGridReady: (params) => {
                const dataSource = {
                    rowCount: null, // behave as infinite scroll
                    getRows: (rowsParams) => {
                        // call my API then rowsParams.successCallback(data, isLastPage);
                    },
                };

                gridOptions.api.setDatasource(dataSource);
            },
        };

调用堆栈

angularjs - 将angularCompileRows设置为true时,无法读取null的 '$apply'属性-LMLPHP

以及debug选项的输出

angularjs - 将angularCompileRows设置为true时,无法读取null的 '$apply'属性-LMLPHP

网格正在渲染: header 可以,但是内容为空。

根据此示例https://plnkr.co/edit/j5ubZWit4CO5zmldgqnl?p=preview插入https://www.ag-grid.com/javascript-grid-infinite-scrolling/#example-2-equal-pagination-page-size-and-large-infinite-block-si并将angularCompileRows: true添加到选项

编辑:这里是带有 Angular 应用程序的plunker https://plnkr.co/edit/7eOKSXbcCzLdYWtPygrS?p=preview

不会引发该错误,但似乎未调用angularCompileRows

最佳答案

如果要在网格中使用 Angular ,为什么不先加载 Angular :)。您没有加载angular,也没有在网格中使用任何 Angular 代码,如果不这样调用$scope.$apply()怎么办?

使angularCompileRows = false和您的网格工作。如果要使用 Angular ,请从 Angular 示例开始。

关于angularjs - 将angularCompileRows设置为true时,无法读取null的 '$apply'属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51039643/

10-10 14:50