角材料7:整行链接

Lae*_*s3r 4 angular-material angular

我正在使用Angular Material 7表(垫子表)。我想要实现的是整个行的链接,以便显示详细信息页面。

要求是显示可以在新选项卡中打开的真实链接,因此通常的(单击)事件不起作用。

我实现了在每个Mat-cell的内容周围添加一个链接,但是由于我有很多专栏,所以这不是一个好的解决方案。

有没有一种很好的方法将每个行转换为链接(href)?

编辑:我删除了我的示例,因为下面给出了正确的答案。

小智 12

那么,你可以做一个空的经典绝招一个标签整行了。只需将标签放入其中一个ng-containers 并为其指定自定义 css 规则:

<mat-table [dataSource]="dataSource" matSort class="mat-elevation-z8">

  <ng-container matColumnDef="name">
    <mat-header-cell *matHeaderCellDef>Name</mat-header-cell>
    <mat-cell *matCellDef="let element">
      {{element.name}}          
      <a fxFlexFill [routerLink]="'/maintenance/data/'+element.id" class="mat-row-link"></a>
    </mat-cell>
  </ng-container>

  <ng-container matColumnDef="lastname">
    <mat-header-cell *matHeaderCellDef>Last Name</mat-header-cell>
    <mat-cell *matCellDef="let element">          
      {{element.lastname}}
    </mat-cell>
  </ng-container>

  <mat-header-row *matHeaderRowDef="displayedColumns"></mat-header-row>
  <mat-row *matRowDef="let row; columns: displayedColumns;"></mat-row>

</mat-table>
Run Code Online (Sandbox Code Playgroud)

然后在 CSS 上:

.mat-row{        
    position: relative;
}

.mat-row-link{
    position: absolute;
    width: 100%;
    height: 100%;
    left: 0;
    top: 0;             
}
Run Code Online (Sandbox Code Playgroud)

请记住,一个空的a标签可以完成这项工作,但不符合所有 SEO 标准...

  • 这似乎是一个好方法,但不幸的是它对我不起作用。我添加了一些文本(以查看位置所在的位置),当我这样做时,我会在视口顶部而不是在行中看到文本。不知何故,position:relative 不适用于`.mat-row`并且作用域为页面。也看不到任何其他位置:链条上的亲戚链接。 (3认同)
  • @RickStrahl 对我来说也一样。你找到解决方案了吗? (2认同)

小智 10

您可以将整行包裹在 a 标记中,并将 routerLink 添加到其中。通过该解决方案,您将获得本机链接处理。我正在使用 cdk-table,但我想这也应该适用于角度材料表。

我的解决方案如下所示:

<cdk-table [dataSource]="data">
    ...
    <a *cdkRowDef="let row; columns; columns" [routerLink]="['path', row.id]">
        <cdk-row></cdk-row>
    </a>
</cdk-table>
Run Code Online (Sandbox Code Playgroud)


Mar*_*us 7

将routerLink添加到

<mat-row *matRowDef="let row; columns: displayedColumns;" routerLink="/maintenance/data/'+row.id" class="row-hover"></mat-row>
Run Code Online (Sandbox Code Playgroud)

要么

您可以将点击事件和自定义CSS类添加到mat-row

<mat-row *matRowDef="let row; columns: displayedColumns;"
(click)="navigateTo(row)" class="row-hover"></mat-row>
Run Code Online (Sandbox Code Playgroud)

然后在.ts文件中:

import { Router } from '@angular/router';
...
...
constructor(private router: Router) {}
...
navigateTo(row: any) {
  this.router.navigate(['/maintenance/data/'+row.id]);
} 
Run Code Online (Sandbox Code Playgroud)

并添加css类

.row-link:hover {
  background-color: rgba(0, 0, 0, .05);
  cursor: pointer;
}
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,但这仍然不是真正的链接。我尝试创建一个包装指令,但由于 matRowDef 已经是一个指令,因此变得非常困难。 (3认同)
  • **这些解决方案都无法访问**。应允许在新选项卡中打开链接,或通过右键单击复制 URL。然而,使用这个解决方案这是不可能的。也无法通过键盘聚焦并按 Enter 键来打开链接。这是不好的做法。 (2认同)