23

请在这段代码中解释一下,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

5 回答 5

38

从我的角度来看,有两种选择:

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

    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;
      }); 
    }    
于 2017-07-06T08:04:05.517 回答
18

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

import { Router } from '@angular/router';
constructor(private router: Router) {
    this.router.routeReuseStrategy.shouldReuseRoute = () => false;
}
于 2019-03-19T17:18:50.003 回答
4

ngOnInit创建组件后调用。因此您可以创建一个函数并再次调用该函数。这是示例代码。

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

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

private callFun(){
   // do code
}
于 2017-07-06T08:00:20.160 回答
4

您不需要再次调用 ngOnInit。所以问题仍然存在,你真正想要完成什么?您在检索路由参数时遇到问题吗?

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

每次路由参数更改时,您在上述订阅中的代码都会自动重新执行。所以不需要再次手动调用ngOnInit。

于 2017-07-06T08:01:42.987 回答
4

这只是一个功能...

ngOnInit() {}

secondMethod() { this.ngOnInit(); }

我一直在这样做来重新加载我的数据,从来没有遇到过问题。

于 2017-07-06T08:02:33.177 回答