【问题标题】:Table expand on icon click点击图标展开表格
【发布时间】:2019-09-17 18:28:27
【问题描述】:

我只想点击箭头图标(expand_more)来展开不是所有的行

角度材料页面上的代码: https://stackblitz.com/angular/oyybnyopyemm?file=app%2Ftable-expandable-rows-example.ts

我的 HTML

    <ng-container matColumnDef="action">
      <th mat-header-cell *matHeaderCellDef mat-sort-header> Actions </th>
      <td mat-cell *matCellDef="let element">
        <mat-icon (click)="onBlink(element)" class="icon bulb" [ngClass]="element.action ? 'blink_me': ''">wb_incandescent</mat-icon>
        <mat-icon (click)="element.status=!element.status" *ngIf="!element.error" class="icon playPause">{{element.status ? 'play_circle_outline' : 'pause_circle_outline' }}</mat-icon>
        <mat-icon *ngIf="element.error" class="error icon">error</mat-icon>
        <mat-icon *matRowDef="let element">expand_more</mat-icon>
      </td>
    </ng-container>

    <ng-container matColumnDef="expandedDetail" >
      <td mat-cell *matCellDef="let element" [attr.colspan]="displayedColumns.length">
        <div class="example-element-detail"
             [@detailExpand]="element == expandedElement ? 'expanded' : 'collapsed'">
          <div>
            <p>Serial : {{element.serial}} </p>
            <p>{{element.name}}have a problem.</p>
            <p>Contact a doctor </p>
          </div>
        </div>
      </td>
    </ng-container>

    <tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>

    <tr mat-row *matRowDef="let element; columns: displayedColumns;"
        class="example-element-row"
        [class.example-expanded-row]="expandedElement === element"
        (click)="expandedElement = expandedElement === element ? null : element"></tr>
    <tr mat-row *matRowDef="let row; columns: ['expandedDetail']" class="example-detail-row" ></tr>

你能帮我设置一下吗?

【问题讨论】:

  • 嗨,这在你分享的演示中工作
  • 请分享您面临的问题和任何控制台错误的屏幕截图。从 stackblitz,行扩展工作正常
  • 链接不是我的代码,是材料网站的demo
  • 我已经设置了展开,但我只想点击箭头图标展开,而不是全部。
  • not all the line 是什么意思?应该只扩展一列?或者通过点击你的icon,然后应该展开行?

标签: javascript angular angular-material


【解决方案1】:

您需要做的就是将click 事件从行移动到您的mat-icon

<mat-icon (click)="expandedElement = expandedElement === element ? null : element">
    {{expandedElement === element ? 'expand_less' : 'expand_more'}}
</mat-icon>

<!-- ... -->

<tr mat-row *matRowDef="let element; columns: columnsToDisplay;"
    class="example-element-row"
    [class.example-expanded-row]="expandedElement === element">
</tr>

这是StackBlitz 上的一个工作示例。

【讨论】:

    【解决方案2】:

    以下面的StackBlitz 为例。

    我在这里所做的基本上是将点击事件处理程序从行移动到您添加的图标。

    <ng-container matColumnDef="{{column}}" *ngFor="let column of columnsToDisplay">
        <th mat-header-cell *matHeaderCellDef> Actions </th>
        <td mat-cell *matCellDef="let element">
            <mat-icon (click)="onBlink(element)" class="icon bulb" [ngClass]="element.action ? 'blink_me': ''">wb_incandescent</mat-icon>
            <mat-icon (click)="element.status=!element.status" *ngIf="!element.error" class="icon playPause">{{element.status ? 'play_circle_outline' : 'pause_circle_outline' }}</mat-icon>
            <mat-icon *ngIf="element.error" class="error icon">error</mat-icon>
            <mat-icon (click)="expandedElement = expandedElement === element ? null : element">expand_more</mat-icon>
        </td>
    </ng-container>
    ...
    <tr mat-row *matRowDef="let element; columns: displayedColumns;"
            class="example-element-row"
            [class.example-expanded-row]="expandedElement === element">
    </tr>
    

    【讨论】:

    • 那行不通,之后我什么都没有了,只有一个空行
    • @Sebastian 您是复制粘贴的代码还是根据您自己的代码进行修改?如果我正确理解您的问题,您只想在单击 箭头 时扩展行,对吗?
    • @Sebastian 我链接的例子怎么样。这不是按照您在 OP 中的要求工作吗?
    • 不,是一样的,我今天早上也试过了
    • @Sebastian 你到底想达到什么目的?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多