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

Angular 18中可用的this元素内部引用为何在Angular 19中失效?

Angular 19中模板事件绑定里的this指向变化问题

问题场景

组件模板代码如下:

<span *ngFor="let date of dateArray">
  <button
    type="button"
    class="btn btn-outline-primary fs-6 mt-1 me-1"
    [attr.data-date]="date"
    [disabled]="isSaving"
    (click)="removeDate(this.date)">
    {{ date }}
    <i class="bi bi-x" [attr.aria-label]="'Delete ' + date"></i>
  </button>
</span>

升级至Angular 19后构建时报错:

Error: src/app/views/.../my.component.html:46:36 - error TS2339: Property 'date' does not exist on type 'AbcComponent'.

46           (click)="removeDate(this.date)">
                                      ~~~~

该组件本身无date属性,Angular 18中this.date可获取按钮data-date属性的值,但直接使用removeDate(date)在Angular 18中也能正常运行。

问题解答

这是Angular团队的bug修复,并非特性移除。

Angular模板的设计规范里,事件绑定表达式中的this原本就应该指向组件实例,而非DOM元素。Angular 18及更早版本中this指向DOM元素属于不符合预期的错误行为,Angular 19修复了这个问题,让this回归到正确的组件上下文。

至于removeDate(date)能一直正常运行,是因为在*ngFor的循环作用域中,date就是当前迭代的变量,直接引用就能拿到对应的值,完全不需要通过this或DOM属性间接获取。之前用this.date能工作纯粹是依赖了旧版本的bug,修复后自然会因为组件实例无date属性而报错。

内容的提问来源于stack exchange,提问作者Green Grasso Holm

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 00:49:57