微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何删除材料数据表的行?

如何解决如何删除材料数据表的行?

在我的 html 文件中,我正在调用一个删除方法并传递我的项目的 id (habitId) 以及我的数据表行的索引。

data-table.component.html:

<ng-container matColumnDef="delete">
  <th mat-header-cell *matHeaderCellDef mat-sort-header>Delete?</th>
  <td mat-cell *matCellDef="let habit; let i = index;">
    <button mat-raised-button color="warn" (click)="delete(habit.habitId,i)">Delete</button>
  </td>
</ng-container>

在我的 data-table.component.ts 文件中,我有以下删除方法

    delete(habitId: Pick<Habit,'habitId'>,i: number,dataSource): void {
    console.log('delete was pressed. the id of the habit is: ',habitId);
    console.log('delete was pressed. the id of the row is: ',i);
    this.habitService
      .deleteHabit(habitId)
      .subscribe(() => ( this.habits$ = this.habitService.fetchAllById(this.authService.userId)));
    console.log(this.dataSource);
    this.dataSource.splice(i,1);
    this.dataSource._updateChangeSubscription();
}

我的数据源定义如下:

dataSource: any = new HabitDataSource(this.habitService,this.authService);

使用 HabitDataSource 类:

    export class HabitDataSource extends DataSource<any> {
  userId: Pick<User,'id'>;

  constructor(private habitService: HabitService,private authService: AuthService) {
    super();
  }

  connect(): Observable<Habit[]> {
    this.userId = this.authService.userId;
    return this.habitService.fetchAllById(this.userId);
  }

  // tslint:disable-next-line:typedef
  disconnect() {}
}

我的惯用服务.ts 中的 deleteHabit 函数执行以下操作(正在运行):

deleteHabit(habitId: Pick<Habit,'habitId'>): Observable<{}> {
console.log('delete method inside the habit service was called',habitId);
return this.http
  .delete<Habit>(`${this.habitsUrl}/${habitId}`,this.httpOptions)
  .pipe(
    first(),catchError(this.errorHandlerService.handleError<Habit>('deleteHabit'))
  );
}

所以基本上我试图在 this.dataSource 上使用 splice() 函数,但我收到错误ERROR TypeError: this.dataSource.splice is not a function强>

我假设这是因为 this.dataSource 不返回数组,并且 splice() 函数只能用于数组。

但是如何解决这个问题?任何帮助都非常感谢。提前致谢!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。