Как звонить из ngOnInit() снова в angular2

объясните, пожалуйста, в этом коде

Как снова вызвать 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();
    }

4 ответов


есть два варианта с моей точки зрения:

вызов ngOnInit () из другой области функций. Но я бы предложил не принимать этот подход дал ngOnInitявляется методом углового ядра, который принадлежит интерфейсу OnInit.

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

update() {
       this.ngOnInit();
}  

Разбейте свою функциональность на другую функцию, используйте ngOnInitвызвать его и, после этого, любой запрос можно сделать от везде путем вызывать функцию в следующим образом: this.<MethodName>();.

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

update() {
       this.getRouteData(); 
}

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

Это просто функция ...

ngOnInit() {}

secondMethod() { this.ngOnInit(); }

Я делал это все время, чтобы перезагрузить мои данные, никогда не было проблем с этим.


ngOnInit вызывается после создания компонента. таким образом, вы можете создать функцию и вызвать ее снова. Вот пример кода.

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

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

private callFun(){
   // do code
}

вам не нужно снова вызывать ngOnInit. Поэтому остается вопрос: Чего вы на самом деле пытаетесь достичь? У вас возникли проблемы с получением параметра маршрутизации?

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

ваш код в пределах подписаться выше будет автоматически повторное выполнение при каждом изменении параметров маршрута. Таким образом, нет необходимости вручную вызывать ngOnInit снова.