Angular ngOnChange在输入中设置值时不检测更改

Angular ngOnChange在输入中设置值时不检测更改,angular,angular-input,Angular,Angular Input,我有一个@Input,当它为真时,它会做一些事情。当它为假时,ngOnChange不会检测到 @Input() viewMode: boolean; ngOnChanges(changes: SimpleChanges) { if (changes.viewMode.currentValue !== undefined) { if (changes.viewMode.currentValue ) { this.populateForm(this.

我有一个@Input,当它为真时,它会做一些事情。当它为假时,ngOnChange不会检测到

@Input() viewMode: boolean;

  ngOnChanges(changes: SimpleChanges) {
    if (changes.viewMode.currentValue !== undefined) {    
      if (changes.viewMode.currentValue ) {
        this.populateForm(this._event);
      }else{
        this.doSomething()
      }
    }
  }


setValue(){

   this.viewMode = false; 
}
当我调用setValue函数时,它不属于ngOnChange

ngOnChanges只在输入更改来自模板绑定时运行,如。如果您手动设置它,如component.someInput=value,则这发生在更改检测周期之外,您需要以某种方式告知Angular您已经更改了某些内容

如果仍希望触发ngOnChanges,则必须手动执行。i、 e


constructor(private cd: ChangeDetectorRef) {}

setValue(){
  this.viewMode = false; 
  this.cd.detectChanges();
}


希望它能帮助你澄清你的疑问

几天前,我自己也有过这种怀疑。我发现,ngOnChanges不是这样发射的。ngOnChanges仅在组件的输入从外部更改时运行。i、 假设你有

这就变成了,

现在只有angular将运行ngOnchanges。如果希望在该变量的属性发生更改时执行某些操作,则应使用该变量的setter和getter,如下所示:

private _viewMode:布尔值; @输入设置视图模式{ 这是。_viewMode=mode; 本次活动的宣传活动; } 获取视图模式{ 返回此选项。\u查看模式; }
现在您可以像这样调用您的函数。setValue,您的表单每次都会填充。

console中是否有任何错误?打印if.中的值。。else条件。请确保您在父级中有类似的内容。您不能调用此。poupulateForm inside setValue方法吗?@Chellappan否我有editableMode和viewMode我更改状态曾经更改值未检测到更改:/