角度-智能表格无法填充

时间:2018-09-05 13:22:31

标签: angular angular6 smart-table ng2-smart-table

我的Smart表不会使用HttpClient填充来发送获取请求以获取json数据。

this.http.get('http://localhost:56591/api/db/get').subscribe((data) => {
  return data;
});

这将返回:

[
  {"id":1,"name":"User1","email":"user1@email.com","password":"test"},
  {"id":2,"name":"User2","email":"user@email.com","password":"test"},
  {"id":3,"name":"User3","email":"user@email.com","password":"test"}
]

使用订阅中的返回值会给我这个错误:

  

错误TypeError:无法读取未定义的属性“切片”       在LocalDataSource.push ../ node_modules / ng2-smart-table / lib / data-source / local / local.data-source.js.LocalDataSource.getElements中   (local.data-source.js:71)

在将对象直接分配给变量时有效:

var data = [
  {"id":1,"name":"User1","email":"user1@email.com","password":"test"},
  {"id":2,"name":"User2","email":"user@email.com","password":"test"},
  {"id":3,"name":"User3","email":"user@email.com","password":"test"}
];
return data;

我能找到的唯一区别是,此代码在使用get请求而不是直接向对象分配变量时给出了错误。

constructor(private service: SmartTableService) {
  const data = this.service.getData();
  this.source.load(data);
}
  

'void'类型的参数不能分配给'any []'类型的参数。

有人知道我出了错吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

您必须等待Http请求完成,然后才能分配它返回的数据。因此,当您分配const data = this.service.getData();时,不会发生任何事情。

您可以通过从服务中的http调用返回一个Observable来解决此问题:

getData() {
    return this.http.get('http://localhost:56591/api/db/get');
}

然后您的组件中的订阅返回的Observable,它将等待http调用解析,然后再将数据传递到this.source.load(data);

this.service.getData().subscribe((data) => {
    this.source.load(data);
});

让我知道是否可行,否则我们可以进一步解决问题。