【问题标题】:Angular 11 table with two nested expandable rows具有两个嵌套可扩展行的 Angular 11 表
【发布时间】:2021-11-10 08:34:51
【问题描述】:

我很难实现具有两层嵌套可扩展行的表。
我正在关注this example,并添加了第二级扩展,但它不起作用。
Here 你可以找到我的工作。
基本上我想点击“Street 1, 78542, Kansas”行并打开它,但我收到了类似未定义的错误。
错误在哪里?我只是将第一级可扩展行复制到嵌套级别。

【问题讨论】:

    标签: angular html-table mat-table angular11


    【解决方案1】:

    在你的html这里

                        <tr mat-header-row *matHeaderRowDef="innerDisplayedColumns"></tr>
                        <tr mat-row *matRowDef="let row; columns: innerDisplayedColumns;"
                            [class.example-element-row]="row.addresses?.data.length"
                            [class.example-expanded-row]="innerExpandedElement === row" (click)="toggleSecondRow(row)">
                        </tr>
    

    这是因为row.addresses.data 未定义。

    你必须更新第 44 行

    [class.example-element-row]="row.addresses?.data.length"
    

    [class.example-element-row]="row.addresses?.data?.length"
    

    更新

      toggleSecondRow(element: Address) {
        console.log('INNER ELEMENT ', element);
        element.addresses &&
        (element.addresses as MatTableDataSource<Address>).data.length
          ? (this.innerExpandedElement =
              this.innerExpandedElement === element ? null : element)
          : null;
        this.cd.detectChanges();
      }
    

    您的对象(element.addresses as MatTableDataSource&lt;Address&gt;).data 未定义。这就是为什么你有错误。如果要切换嵌套行,则需要将数据放入其中。

    console.log 向我们展示了这一点

    INNER ELEMENT
    addresses: Array[1]
      0: Object
        city: "Kansas"
        street: "Street 1"
        zipCode: "78542"
        __proto__: Object
      city: "Kansas"
      street: "Street 1"
      zipCode: "78542"
    __proto__: Object
    

    您的elementaddresses。但是addresses 没有data 属性。

    【讨论】:

    • 它解决了第一行错误,但现在当我点击内行时,它给出了同样的错误:“错误:无法读取未定义的属性(读取'长度')”。我已经更新了问题中的网址
    • 但是 element.addresses 不是未定义的,所以我不明白为什么它不能创建 mattabledatasource。我试过记录 element.addresses ,它是一个包含一个对象的数组
    • 我没有说element.addresses 未定义,我说(element.addresses as MatTableDataSource&lt;Address&gt;).data 未定义。我已经更新了我的答案以使其更清晰。
    • 好的,所以我尝试过 element.addresses = new MatTableDataSource(element.addresses);但它告诉我“地址 [] | 类型的参数MatTableDataSource
      ' 不可分配给“Address[]”类型的参数。我不明白为什么。我已使用此分配更新了方法以显示错误
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-19
    • 2012-03-09
    • 1970-01-01
    • 2015-03-22
    • 2020-01-08
    • 1970-01-01
    相关资源
    最近更新 更多