为何子组件自身更新@Input()属性时@NgOnChanges未触发?
@Input() animal = "Tiger" editAnimal(animal: string){ this.animal = animal }
当用户在文本框输入新动物名称并点击提交按钮时,editAnimal函数会执行。一切功能正常,但ngOnChanges并未触发,而ngDoCheck却正常运行,请问这是为什么?
核心原因:
ngOnChanges的触发前提是父组件通过输入绑定传递给子组件的@Input属性值发生了外部变更。你这里是在组件内部通过editAnimal直接修改this.animal,属于组件内部的状态更新,并非来自父组件的输入变更,所以这个钩子不会被触发。ngDoCheck是Angular变更检测周期的通用钩子,只要组件触发了变更检测(比如点击提交按钮这类用户事件会自动触发变更检测),不管是内部状态变化还是外部输入变化,它都会执行,所以这里能正常运行。
内容的提问来源于stack exchange,提问作者User9123
相关产品推荐
相关产品推荐

