Ag-Grid 未呈现从服务器下载的数据
Ag-Grid is not rendering data downloaded from server
我正在尝试使用 Ag-Grid Angular 来显示我从后端下载的数据集。
它应该显示 table 可视化的组件如下
dataset.component.html
<div class='body-container'>
<ag-grid-angular
style="width: 1250px; height: 650px;"
class="ag-theme-balham"
[enableFilter]="true"
[pagination]="true"
[rowData]="rowData"
[columnDefs]="columnDefs">
</ag-grid-angular>
</div>
dataset.component.ts
import { Component, OnInit } from '@angular/core';
import { Router, ActivatedRoute } from '@angular/router';
import { DatasetService } from 'src/app/services/datasets.service';
@Component({
selector: 'app-dataset',
templateUrl: './dataset.component.html',
styleUrls: ['./dataset.component.css']
})
export class DatasetComponent implements OnInit {
columnDefs = [];
rowData = [];
datasetId;
constructor(private router: ActivatedRoute,
private datasetService: DatasetService) {
debugger;
this.router.queryParams.subscribe(async params => {
this.datasetId = params['id'];
});
}
async ngOnInit() {
if (this.datasetId !== null || this.datasetId !== undefined) {
await this.datasetService.showDataset(this.datasetId).toPromise().then((res) => {
let dataset = JSON.parse(res['data']);
const jsonKeys = Object.keys(dataset);
jsonKeys.forEach((el) => {
this.columnDefs.push(
{
headerName: el,
field: el
});
});
const maxLength = Object.keys(dataset[jsonKeys[0]]).length;
for (let i = 0; i < maxLength; i++) {
let row = {}
jsonKeys.forEach((el) => {
row[el] = dataset[el][i];
});
this.rowData.push(row);
}
debugger;
});
}
}
}
我基本上做的是,因为我每次都不知道我的列和数据会是什么样子,所以在该组件的 init 上实例化它们,以便它们可以传递到 ag-grid零件。可悲的是,这是行不通的。
我还看到官方指南说,为了获取远程数据,我应该这样做
<div class='body-container'>
<ag-grid-angular
style="width: 1250px; height: 650px;"
class="ag-theme-balham"
[enableFilter]="true"
[pagination]="true"
[rowData]="rowData | async"
[columnDefs]="columnDefs">
</ag-grid-angular>
</div>
但是添加异步管道会抛出这个错误
core.js:6014 ERROR Error: InvalidPipeArgument: '' for pipe 'AsyncPipe'
at invalidPipeArgumentError (common.js:6367)
at AsyncPipe._selectStrategy (common.js:7243)
at AsyncPipe._subscribe (common.js:7224)
at AsyncPipe.transform (common.js:7202)
at Object.eval [as updateDirectives] (DatasetComponent.ngfactory.js:21)
at Object.updateDirectives (core.js:44780)
at checkAndUpdateView (core.js:44271)
at callViewAction (core.js:44637)
at execComponentViewsAction (core.js:44565)
at checkAndUpdateView (core.js:44278)
有人能指出我正确的方向吗?
谢天谢地,找到了答案...从本质上讲,Angular 是以随机顺序呈现所有内容,而没有帮助我很好地理解正在发生的事情。
我所做的只是
dataset.component.html
<div class='body-container'>
<ag-grid-angular
style="width: 1250px; height: 650px;"
class="ag-theme-balham"
[enableFilter]="true"
[pagination]="true"
(gridReady)="onGridReady($event)"
>
</ag-grid-angular>
</div>
正在删除 colDefs 和 rowData 的绑定。相反,当网格准备就绪时...
dataset.component.ts
import { Component, OnInit } from '@angular/core';
import { Router, ActivatedRoute } from '@angular/router';
import { DatasetService } from 'src/app/services/datasets.service';
@Component({
selector: 'app-dataset',
templateUrl: './dataset.component.html',
styleUrls: ['./dataset.component.css']
})
export class DatasetComponent implements OnInit {
columnDefs = [];
rowData = [];
datasetId;
constructor(private router: ActivatedRoute,
private datasetService: DatasetService) {
debugger;
this.router.queryParams.subscribe(async params => {
this.datasetId = params['id'];
});
}
async ngOnInit() {
}
async onGridReady(params) {
await this.datasetService.showDataset(this.datasetId).toPromise().then((res) => {
let dataset = JSON.parse(res['data']);
const jsonKeys = Object.keys(dataset);
jsonKeys.forEach((el) => {
this.columnDefs.push(
{
headerName: el,
field: el
});
});
const maxLength = Object.keys(dataset[jsonKeys[0]]).length;
for (let i = 0; i < maxLength; i++) {
let row = {}
jsonKeys.forEach((el) => {
row[el] = dataset[el][i];
});
this.rowData.push(row);
}
debugger;
});
params.api.setColumnDefs(this.columnDefs);
params.api.setRowData(this.rowData);
}
}
我只是从服务器获取数据,强制函数等待下载,然后设置列和行数据
我正在尝试使用 Ag-Grid Angular 来显示我从后端下载的数据集。
它应该显示 table 可视化的组件如下
dataset.component.html
<div class='body-container'>
<ag-grid-angular
style="width: 1250px; height: 650px;"
class="ag-theme-balham"
[enableFilter]="true"
[pagination]="true"
[rowData]="rowData"
[columnDefs]="columnDefs">
</ag-grid-angular>
</div>
dataset.component.ts
import { Component, OnInit } from '@angular/core';
import { Router, ActivatedRoute } from '@angular/router';
import { DatasetService } from 'src/app/services/datasets.service';
@Component({
selector: 'app-dataset',
templateUrl: './dataset.component.html',
styleUrls: ['./dataset.component.css']
})
export class DatasetComponent implements OnInit {
columnDefs = [];
rowData = [];
datasetId;
constructor(private router: ActivatedRoute,
private datasetService: DatasetService) {
debugger;
this.router.queryParams.subscribe(async params => {
this.datasetId = params['id'];
});
}
async ngOnInit() {
if (this.datasetId !== null || this.datasetId !== undefined) {
await this.datasetService.showDataset(this.datasetId).toPromise().then((res) => {
let dataset = JSON.parse(res['data']);
const jsonKeys = Object.keys(dataset);
jsonKeys.forEach((el) => {
this.columnDefs.push(
{
headerName: el,
field: el
});
});
const maxLength = Object.keys(dataset[jsonKeys[0]]).length;
for (let i = 0; i < maxLength; i++) {
let row = {}
jsonKeys.forEach((el) => {
row[el] = dataset[el][i];
});
this.rowData.push(row);
}
debugger;
});
}
}
}
我基本上做的是,因为我每次都不知道我的列和数据会是什么样子,所以在该组件的 init 上实例化它们,以便它们可以传递到 ag-grid零件。可悲的是,这是行不通的。
我还看到官方指南说,为了获取远程数据,我应该这样做
<div class='body-container'>
<ag-grid-angular
style="width: 1250px; height: 650px;"
class="ag-theme-balham"
[enableFilter]="true"
[pagination]="true"
[rowData]="rowData | async"
[columnDefs]="columnDefs">
</ag-grid-angular>
</div>
但是添加异步管道会抛出这个错误
core.js:6014 ERROR Error: InvalidPipeArgument: '' for pipe 'AsyncPipe'
at invalidPipeArgumentError (common.js:6367)
at AsyncPipe._selectStrategy (common.js:7243)
at AsyncPipe._subscribe (common.js:7224)
at AsyncPipe.transform (common.js:7202)
at Object.eval [as updateDirectives] (DatasetComponent.ngfactory.js:21)
at Object.updateDirectives (core.js:44780)
at checkAndUpdateView (core.js:44271)
at callViewAction (core.js:44637)
at execComponentViewsAction (core.js:44565)
at checkAndUpdateView (core.js:44278)
有人能指出我正确的方向吗?
谢天谢地,找到了答案...从本质上讲,Angular 是以随机顺序呈现所有内容,而没有帮助我很好地理解正在发生的事情。
我所做的只是
dataset.component.html
<div class='body-container'>
<ag-grid-angular
style="width: 1250px; height: 650px;"
class="ag-theme-balham"
[enableFilter]="true"
[pagination]="true"
(gridReady)="onGridReady($event)"
>
</ag-grid-angular>
</div>
正在删除 colDefs 和 rowData 的绑定。相反,当网格准备就绪时...
dataset.component.ts
import { Component, OnInit } from '@angular/core';
import { Router, ActivatedRoute } from '@angular/router';
import { DatasetService } from 'src/app/services/datasets.service';
@Component({
selector: 'app-dataset',
templateUrl: './dataset.component.html',
styleUrls: ['./dataset.component.css']
})
export class DatasetComponent implements OnInit {
columnDefs = [];
rowData = [];
datasetId;
constructor(private router: ActivatedRoute,
private datasetService: DatasetService) {
debugger;
this.router.queryParams.subscribe(async params => {
this.datasetId = params['id'];
});
}
async ngOnInit() {
}
async onGridReady(params) {
await this.datasetService.showDataset(this.datasetId).toPromise().then((res) => {
let dataset = JSON.parse(res['data']);
const jsonKeys = Object.keys(dataset);
jsonKeys.forEach((el) => {
this.columnDefs.push(
{
headerName: el,
field: el
});
});
const maxLength = Object.keys(dataset[jsonKeys[0]]).length;
for (let i = 0; i < maxLength; i++) {
let row = {}
jsonKeys.forEach((el) => {
row[el] = dataset[el][i];
});
this.rowData.push(row);
}
debugger;
});
params.api.setColumnDefs(this.columnDefs);
params.api.setRowData(this.rowData);
}
}
我只是从服务器获取数据,强制函数等待下载,然后设置列和行数据