如何在angular2中再次调用ngOnInit()

Kru*_*nal 13 angular angular-lifecycle-hooks

请在此代码中解释,

当我调用另一个方法时,如何再次调用ngOnInit()

 ngOnInit(): void {
      this.route.params.subscribe((params: Params) => {
        this.model=this.userData;
  });      
 }         

 update() {
        this.loading = true;
        this.userService.update(this.model)
            .subscribe(
                data => {
                    alert ('Update successful');
                },
                error => {
                    alert  ('Not updated');
                    this.loading = false;
                });
                this.user_data();
    }
Run Code Online (Sandbox Code Playgroud)

may*_*yur 23

从我的观点来看,有两种选择:

从另一个函数范围调用ngOnInit().但我建议不要采用这种方法,因为它ngOnInit是属于OnInit接口的角度核心方法.

public ngOnInit() {
      this.route.params.subscribe((params: Params) => {
      this.model=this.userData;
  });      
}

update() {
       this.ngOnInit();
}  
Run Code Online (Sandbox Code Playgroud)

将您的功能分解为另一个功能,用于ngOnInit调用它,之后,可以通过以下方式调用该功能从任何地方发出任何请求:this.<MethodName>();.

public ngOnInit() {
      this.getRouteData();
}

update() {
       this.getRouteData(); 
}

getRouteData() {
  this.route.params.subscribe((params: Params) => {
      this.model=this.userData;
  }); 
}    
Run Code Online (Sandbox Code Playgroud)


Har*_*Das 18

如果目的是ngOnInit()在查询参数更新时触发,则执行以下操作:

import { Router } from '@angular/router';
constructor(private router: Router) {
    this.router.routeReuseStrategy.shouldReuseRoute = () => false;
}
Run Code Online (Sandbox Code Playgroud)