24

Please explain in this code, how to call ngOnInit() again when I call another method?

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();
}
Mario Petrovic
  • 7,500
  • 14
  • 42
  • 62
Krunal
  • 938
  • 2
  • 10
  • 33
  • 5
    What's the purpose? Just move the code to another method and call that method from `ngOnInit()`. `ngOnInit()` is called once for every method. There is no way to make it being called multiple times. – Günter Zöchbauer Jul 06 '17 at 07:45
  • please explain me for updated code – Krunal Jul 06 '17 at 07:48

5 Answers5

41

There are two options from my point of view:

Calling ngOnInit() from another function scope. But I would suggest to do not adopt this approach given ngOnInitis an angular core method that belongs to OnInit Interface.

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

Break your functionality into another function, use ngOnInitto call it and, afterwards, any request can be made from anywhere by calling the function in the following manner: this.<MethodName>();.

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

    getRouteData() {
      this.route.params.subscribe((params: Params) => {
          this.model=this.userData;
      }); 
    }    
raaaay
  • 496
  • 7
  • 14
mayur
  • 3,558
  • 23
  • 37
18

If the purpose is to trigger ngOnInit() when query param is updated, then do following:

import { Router } from '@angular/router';
constructor(private router: Router) {
    this.router.routeReuseStrategy.shouldReuseRoute = () => false;
}
Brian Tompsett - 汤莱恩
  • 5,753
  • 72
  • 57
  • 129
Hari Das
  • 10,145
  • 7
  • 62
  • 59
4

ngOnInit called once the component is created. so you can create a function and call the function again. Here is the sample code.

ngOnInit(): void {
    this.callFun();
}    

update() {
    this.callFun();
    // do code
}

private callFun(){
   // do code
}
Tushar Ghosh
  • 942
  • 1
  • 12
  • 18
4

You should not need to call ngOnInit again. So the question remains, what are you really trying to accomplish? Are you having issues retrieving the routing parameter?

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

Your code within the subscribe above will AUTOMATICALLY be re-executed every time the route parameters change. So there is no need to manually call ngOnInit again.

DeborahK
  • 57,520
  • 12
  • 104
  • 129
4

It's just a function ...

ngOnInit() {}

secondMethod() { this.ngOnInit(); }

I've been doing it all the time to reload my data, never had a problem with it.