通过ID删除数据

时间:2019-09-24 07:12:28

标签: angular typescript

实际上,我想从列表中删除数据。但是我在使用此代码时遇到了麻烦。

组件代码

removeSelectedRows(){
    console.log(this.selection.selected.map(item => item.userId))
    const selectedRowIds = this.selection.selected.map(item => item.userId);
       console.log(selectedRowIds)
      this.UserService.deleteUser(selectedRowIds).subscribe(res =>{
        this.dataSource.data = this.dataSource.data.filter(data => data.userId !== selectedRowIds);
      }, err =>{
        console.error(err);  
      }, ()=>{
        // this.clearUserForm();
        this.loadUsers(this.pageIndex);
      });
  }

错误是从这部分this.UserService.deleteUser(selectedRowIds).subscribe(res =>{ this.dataSource.data = this.dataSource.data.filter(data => data.userId !== selectedRowIds)出来的。

selectRowIds错误出现

  

'string []'类型的参数不能分配给'string'类型的参数

2 个答案:

答案 0 :(得分:0)

selectedRowIds是一个数组。因此,您无法将stringarray of strings进行比较。也许您可以使用Array.includes()

this.dataSource.data.filter(data => !selectedRowIds.includes(data.userId))

希望这会有所帮助。


更新

这只是一个假设,因为我不知道deleteUser方法的内容。该服务的方法似乎期望用户的单个 ID。因此,您需要遍历所选的ID或重构服务方法以使其接受ID数组。但是要小心,如果您遍历数组并为每个用户分别调用,并且调用了API端点,则可能会导致不良行为。

selectedRowIds.forEach((selectedID) => {

    this.UserService.deleteUser(selectedID).subscribe(res =>{
    //                            ^^ Here's a single ID

        this.dataSource.data = this.dataSource.data.filter(data => data.userId !== selectedID);
    //                                                                 ^^^^^^^^^^^^^^^^ filter by selectedID
      }, err =>{
        console.error(err);  
      }, ()=>{
        // this.clearUserForm();
        this.loadUsers(this.pageIndex);
      }
    );
});

但是我不建议这样。它可能导致对API的多次调用(如果使用的话)

答案 1 :(得分:0)

我找到了答案,并且可以解决我的问题

组件代码

selectedRow: any;

removeSelectedRows(){
    console.log(this.selectedRow.userId)
       this.UserService.deleteUser(this.selectedRow.userId).subscribe(res =>{
        this.dataSource.data = this.dataSource.data.filter(data => data.userId!== this.selectedRow.userId);
      }, err =>{
        console.error(err);  
      }, ()=>{
        this.ngOnInit();
        this.loadUsers(this.pageIndex);
      });
  }