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

Angular模板*ngIf已判断node为null仍报错读取data属性如何解决

错误原因

你现有写法仅校验了node本身非空,但未校验node.parent是否为null,报错实际是访问node.parent.data时触发,而非node.data的问题。

解决方案

方案1:使用可选链操作符(推荐,Angular 12+ 原生支持)

模板中直接使用可选链,遇到空值自动终止表达式执行,不会抛出错误:

<div class="icon-action"
     *ngIf="node?.data?.name && !node?.parent?.data?.virtual"
     (click)="delete(node)">
     <img src="./assets/img/cross.png">
</div>

方案2:补充空值判断(适配低版本Angular)

手动补充node.parent的非空校验:

<div class="icon-action"
     *ngIf="node != null && node.data && node.data.name && node.parent != null && !node.parent.data.virtual"
     (click)="delete(node)">
     <img src="./assets/img/cross.png">
</div>

方案3:逻辑抽离到组件类(易维护、易调试)

把校验逻辑放到组件ts文件中,模板仅调用方法即可:
组件ts代码:

// 替换any为你node的实际类型
showDeleteIcon(node: any): boolean {
  return !!node?.data?.name && !!node?.parent?.data && !node.parent.data.virtual;
}

模板代码:

<div class="icon-action"
     *ngIf="showDeleteIcon(node)"
     (click)="delete(node)">
     <img src="./assets/img/cross.png">
</div>

内容的提问来源于stack exchange,提问作者The Outstanding Question Asker

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 08:54:03