【发布时间】:2019-05-14 19:11:49
【问题描述】:
我正在使用 Angular Material 7 表(垫表)。我想要实现的是整个行的链接以显示详细信息页面。
要求是显示一个可以在新标签页中打开的真实链接,因此通常的(点击)事件不起作用。
我实现了在每个 mat-cell 的内容周围添加一个链接,但由于我有很多列,这不是一个好的解决方案。
有没有一种好方法可以将每个 mat-row 转换为链接(href)?
编辑:我删除了我的示例,因为下面给出了正确答案。
【问题讨论】:
我正在使用 Angular Material 7 表(垫表)。我想要实现的是整个行的链接以显示详细信息页面。
要求是显示一个可以在新标签页中打开的真实链接,因此通常的(点击)事件不起作用。
我实现了在每个 mat-cell 的内容周围添加一个链接,但由于我有很多列,这不是一个好的解决方案。
有没有一种好方法可以将每个 mat-row 转换为链接(href)?
编辑:我删除了我的示例,因为下面给出了正确答案。
【问题讨论】:
您可以添加Anuglar Material Docs 中定义的行。这样您就可以将 [routerLink] 添加到整行而不是单个单元格。
【讨论】:
将 routerLink 添加到 mat-row
<mat-row *matRowDef="let row; columns: displayedColumns;" [routerLink]="'transaction/' + row.id" class="row-hover"></mat-row>
或
您可以将点击事件和自定义 css 类添加到 mat-row:
<mat-row *matRowDef="let row; columns: displayedColumns;"
(click)="navigateTo(row)" class="row-hover"></mat-row>
然后在 .ts 文件中:
import { Router } from '@angular/router';
...
...
constructor(private router: Router) {}
...
navigateTo(row: any) {
this.router.navigate(['/maintenance/data/'+row.id]);
}
并添加css类
.row-link:hover {
background-color: rgba(0, 0, 0, .05);
cursor: pointer;
}
【讨论】:
[routerLink]="'transaction/' + row.id" 否则它不会工作
好吧,您可以在整行上使用空 a 标记的经典技巧。 只需将标签放入 仅一个 的 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>
然后在 CSS 上:
.mat-row{
position: relative;
}
.mat-row-link{
position: absolute;
width: 100%;
height: 100%;
left: 0;
top: 0;
}
请记住,一个空的 a 标签可以完成这项工作,但并不符合所有 SEO 标准...
【讨论】:
.mat-row,而是针对页面。没有看到任何其他位置:亲戚也链接了链条。
您可以将整行包装在一个标签中,然后将 routerLink 添加到该标签中。使用该解决方案,您将获得本机链接处理。我正在使用 cdk-table,但我想这也应该适用于角材料表。
我的解决方案如下:
<cdk-table [dataSource]="data">
...
<a *cdkRowDef="let row; columns; columns" [routerLink]="['path', row.id]">
<cdk-row></cdk-row>
</a>
</cdk-table>
【讨论】: