【问题标题】:Remove data by Id按 ID 删除数据
【发布时间】:2020-01-24 06:13:13
【问题描述】:

实际上,我想从列表中删除数据。但是这段代码有一点问题。

组件代码

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' 类型的参数

【问题讨论】:

  • 看起来 selectedRowIds 是一个 string[] 并且您正试图将它与一个 string 进行比较。
  • 感谢您的评论...我已经这样写了const selectedRowIds: string[] = this.selection.selected.map(item => item.agentId);,但它不起作用
  • 这仍然行不通,因为filter(...)中出现了错误
  • 就像 Nicholas K 所说,问题在于您将字符串数组与单个字符串进行比较。因此,尝试将 string[] = this.selection.selected.map(item => item.agentId); 更改为 string[] = this.selection.selected.map(item => item.agentId)[0]
  • 你能给出正确答案吗?让我容易理解

标签: angular typescript


【解决方案1】:

我找到了答案,它解决了我的问题

组件代码

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);
      });
  }

【讨论】:

    【解决方案2】:

    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 的多次调用(如果您使用的话)

    【讨论】:

    • 感谢您的回答.. 但是这部分呼叫服务怎么样this.UserService.deleteUser(selectedRowIds).subscribe(res =>{ 我仍然收到这个selectedRowIds 的错误
    猜你喜欢
    • 2017-01-04
    • 1970-01-01
    • 2021-04-28
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    • 2017-04-25
    • 2019-03-19
    • 1970-01-01
    相关资源
    最近更新 更多