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

为何子组件自身更新@Input()属性时@NgOnChanges未触发?

@Input() animal = "Tiger"

editAnimal(animal: string){
  this.animal = animal
}

当用户在文本框输入新动物名称并点击提交按钮时,editAnimal函数会执行。一切功能正常,但ngOnChanges并未触发,而ngDoCheck却正常运行,请问这是为什么?

核心原因:

  • ngOnChanges的触发前提是父组件通过输入绑定传递给子组件的@Input属性值发生了外部变更。你这里是在组件内部通过editAnimal直接修改this.animal,属于组件内部的状态更新,并非来自父组件的输入变更,所以这个钩子不会被触发。
  • ngDoCheck是Angular变更检测周期的通用钩子,只要组件触发了变更检测(比如点击提交按钮这类用户事件会自动触发变更检测),不管是内部状态变化还是外部输入变化,它都会执行,所以这里能正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 15:24:53