angular - 如何停止在 ngOnInit() 之前调用的 ngOnChanges

标签 angular

在我的 Angular 应用程序中,我想到了这样一种情况,即只有当输入绑定(bind)到更改时才应调用 ngOnchanges。那么,有没有办法在 ngOnInit 之前停止执行 ngOnChanges。有没有办法做到这一点。 提前致谢。

最佳答案

你无法阻止这种行为,但你可以:

使用主题:

class Foo implements OnChanges,OnInit,OnDestroy{

  onChanges = new Subject<SimpleChanges>();

  ngOnInit(){
    this.onChanges.subscribe((data:SimpleChanges)=>{
      // only when inited
    });
  }
  ngOnDestroy(){
    this.onChanges.complete();
  }

  ngOnChanges(changes:SimpleChanges){
    this.onChanges.next(changes);
  }

}

使用 bool 属性:

class Foo implements OnChanges,OnInit{

  initialized=false;

  ngOnInit(){
    // do stuff
    this.initialized = true;
  }

  ngOnChanges(changes:SimpleChanges){
    if(this.initialized){
      // do stuff when ngOnInit has been called
    }
  }

}

使用SimpleChanges API

您还可以检查 SimpleChange.isFirstChange()方法:

isFirstChange() : boolean Check whether the new value is the first value assigned.

class Foo implements OnChanges,OnInit{

  @Input()
  bar:any;

  ngOnInit(){
    // do stuff
  }

  ngOnChanges(changes:SimpleChanges){
    if(!changes["bar"].isFirstChange()){
      // do stuff if this is not the initialization of "bar"
    }
  }

}

关于angular - 如何停止在 ngOnInit() 之前调用的 ngOnChanges,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43111474/

相关文章:

javascript - Angular 动态表单组输入

javascript - angular 2 使用具有组件本地成员的 'onended' 音频事件发射器

typescript - Angular 2 :Passing an object betwen 2 component via service

angular - HttpClient 不返回数据

javascript - ExpressionChangedAfterItHasBeenCheckedError 解决方法

angular - 如何解码 x509 证书以获取到期日期?

express - 不同口岸的本地 Passport 授权

Angular Material cdkDrag拖拽,目标元素如何使用?

html - Angular 7+ : ngbDropdown menu collapse instead of popover

javascript - 无法解析 Angular 2 中 MapsPage :(? ,NavController,LaunchNavigator,.......) 的所有参数