You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular Material DataTable添加编辑链接失效问题求助

问题分析与解决方案

你遇到的问题是因为Angular插值表达式的使用方式错误,导致user.id没有被正确注入到链接路径中。

错误原因

你原来的代码里,把{{user.id}}放在了字符串拼接的语法里:

href="#/categorias/usuarios/detalle/' + {{user.id}} + '"

这不符合Angular的模板语法规则——插值表达式{{}}不能嵌套在这种字符串拼接的写法里,Angular无法正确解析这个表达式,所以最终渲染时只保留了基础路径,丢失了用户ID。

正确的写法

这里有两种可行的修复方式:

1. 直接使用插值表达式拼接路径

把user.id直接通过插值表达式插入到完整路径中:

<ng-container matColumnDef="action">
  <mat-header-cell *matHeaderCellDef> Action </mat-header-cell>
  <mat-cell *matCellDef="let user">
    <a href="#/categorias/usuarios/detalle/{{user.id}}" class="m-portlet__nav-link btn m-btn m-btn--hover-accent m-btn--icon m-btn--icon-only m-btn--pill">
      <i class="fa fa-edit"></i>
    </a>
  </mat-cell>
</ng-container>

2. 使用Angular属性绑定(推荐)

用方括号[href]来绑定一个TypeScript表达式,直接拼接字符串和user.id:

<ng-container matColumnDef="action">
  <mat-header-cell *matHeaderCellDef> Action </mat-header-cell>
  <mat-cell *matCellDef="let user">
    <a [href]="'#/categorias/usuarios/detalle/' + user.id" class="m-portlet__nav-link btn m-btn m-btn--hover-accent m-btn--icon m-btn--icon-only m-btn--pill">
      <i class="fa fa-edit"></i>
    </a>
  </mat-cell>
</ng-container>

额外优化:使用Angular RouterLink(更规范)

如果你的项目使用了Angular Router,建议用routerLink指令代替原生的href,这样更符合Angular的路由规范,也能自动处理路由的哈希模式等配置:

<ng-container matColumnDef="action">
  <mat-header-cell *matHeaderCellDef> Action </mat-header-cell>
  <mat-cell *matCellDef="let user">
    <a [routerLink]="['/categorias/usuarios/detalle', user.id]" class="m-portlet__nav-link btn m-btn m-btn--hover-accent m-btn--icon m-btn--icon-only m-btn--pill">
      <i class="fa fa-edit"></i>
    </a>
  </mat-cell>
</ng-container>

这种方式不需要手动添加#,Angular会根据你的路由配置自动生成正确的链接地址。

内容的提问来源于stack exchange,提问作者Pedro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:28:43