ERROR TypeError:无法读取属性' slice'在搜索功能中未定义 - Angular 2+

时间:2018-06-06 15:05:36

标签: angular angular-datatables

我正在实施一个angular5-data-table模块。我能够使用它的所有功能。另外,我想在其上添加搜索功能。我添加了下面的代码(包括html和typescript),我开始收到ERROR TypeError: Cannot read property 'slice' of undefined错误。

我的搜索HTML是:

<input type="text" class="form-control input-md" placeholder="Search by full name" #query (keyup)="searchMember(query.value)" [(ngModel)]="filter.name">

searchMember(query.value)背后的代码是:

searchMember(query: string) {
  let members = this.allMembers;
  if (this.filter.firstName) {
    members = members.filter(o => o.firstName.toLowerCase().includes(query.toLowerCase()));
 }
  this.members = members;
  this.initializeTable(this.members);
  console.log(members);
}

以下是initializeTable()

  private initializeTable(members: Member[]) {
    this.tableResource = new DataTableResource(members);
    this.tableResource.query({ offset: 0 }).then(items => this.items = items);
    this.tableResource.count().then(count => this.itemCount = count);
 }

最后,这里是初始化:

filter: any = {};
tableResource: DataTableResource<Member>;
allMembers: Member[];

我不确定我是否理解错误。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

基于DataTableResource类中的代码行:

https://github.com/brunano21/angular-4-data-table/blob/master/libs/datatable/src/tools/data-table-resource.ts#L9

看起来“查询”方法试图对它自己的项进行切片,这是在它的构造函数中设置的。你在这里这样做:

this.tableResource = new DataTableResource(members);

因此,如果未定义members,则无法切片并抛出该错误。确保在初始化数据表之前定义了members