typescript 可单击的角形材料卡

js81xvg6  于 2022-11-30  发布在  TypeScript
关注(0)|答案(5)|浏览(172)

我想在一个mat-card组件中添加一个routerlink,使卡可以点击。我的组件是这样的:

<mat-card class="card" >
     <mat-card-content>
          <mat-card-title> {{title}}</mat-card-title>
          <mat-card-subtitle> {{subtitle}} </mat-card-subtitle>
     </mat-card-content>
</mat-card>

如何做到这一点?

  • 谢谢-谢谢
dba5bblo

dba5bblo1#

只需使用routerLink

<mat-card-content  routerLink = "path">
mwngjboj

mwngjboj2#

<mat-card (click)="doStuff()" class="card" >
     <mat-card-content>
          <mat-card-title> {{title}}</mat-card-title>
          <mat-card-subtitle> {{subtitle}} </mat-card-subtitle>
     </mat-card-content>
</mat-card>

然后它应该处理点击

vktxenjb

vktxenjb3#

如果在导航之前需要进行任何操作,最佳做法是使用单击方法处理任何操作并进行导航:
HTML

<mat-card class="card" (click)="navigate()">
     <mat-card-content>
          <mat-card-title> {{title}}</mat-card-title>
          <mat-card-subtitle> {{subtitle}} </mat-card-subtitle>
     </mat-card-content>
</mat-card>

T

import { Router } from '@angular/router';

constructor(private router:Router){
}
navigate(){
//do your any operations
this.router.navigate(['path']);
//also you can pass like this,
 this.router.navigateByURL(['path']);
}
ix0qys7i

ix0qys7i4#

如果你有动态路由,你可以像下面这样使用[routerLink]指令:
我们使用事件绑定来达到title。您也可以将动态值与静态值混合。
例如,如果我们的组件中有一个名为team的变量,其属性为id,我们可以定义如下路径:
[routerLink]="['/teams', 'edit', team?.id]"
在这个例子中,数组'/teams''edit'的第一个和第二个值是静态的,team?.id是动态的,我们通过事件绑定来实现。
它可以在浏览器中翻译如下:/teams/edit/3

<mat-card class="card" [routerLink]="[title] >
  <mat-card-content>
       <mat-card-title> {{title}}</mat-card-title>
       <mat-card-subtitle> {{subtitle}} </mat-card-subtitle>
  </mat-card-content>
</mat-card>
mrzz3bfm

mrzz3bfm5#

请不要忘记可访问性。你基本上是把卡变成了一个按钮。所以你需要告诉辅助设备它是一个按钮。看看ARIA Authoring Practices Guide button examples
您还需要添加默认的按钮事件绑定(单击、空格键、回车键)。如果您使用的是路由器,您可能需要遵循Karnan Muthukumar的建议,在TypeScript中而不是HTML中处理路由器导航,以便拥有必要的事件绑定。

<mat-card role="button" tabindex="0" class="is-focusable"
    (click)="cardEventHandler() 
    (keydown.enter)="cardEventHandler()" 
    (keydown.space)="cardEventHandler(); $event.preventDefault()">

    <mat-card-title> {{title}} </mat-card-title>
    <mat-card-subtitle> {{subtitle}} </mat-card-subtitle>
    <mat-card-content>  {{content}} </mat-card-content>

</mat-card>

**注意:**如果您不考虑默认的空格键行为,空格键事件绑定可能会导致窗口滚动。使用keydown.space而不是keyup.space有助于在默认行为发生之前阻止它。您可以在HTML中使用preventDefault(),或者将$事件传递给您的方法并在方法中使用preventDefault()。

.is-focusable类别会加入指标游标和焦点可见的虚拟类别,以提供自订焦点状态样式。

.is-focusable {
  cursor: pointer;
}

.is-focusable:focus-visible {
  outline: none;
  background-color: #efefef;
  box-shadow: 0 3px 5px -1px #0003, 0 6px 10px #00000024, 0 1px 18px #0000001f;
}

当然,只要不删除所有的焦点样式(默认或自定义),并且不让键盘用户知道卡何时被聚焦,您就可以按自己喜欢的方式处理样式。

相关问题