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

时间:2017-07-06 07:41:37

标签: angular

请在此代码中解释,

当我调用另一个方法时,如何再次调用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();
    }

5 个答案:

答案 0 :(得分:18)

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

  

从另一个功能范围调用ngOnInit()。但我建议不要在ngOnInit is an angular core method that belongs to 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;
  }); 
}    

答案 1 :(得分:3)

这只是一个功能......

ngOnInit() {}

secondMethod() { this.ngOnInit(); }

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

答案 2 :(得分:2)

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

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

每次路由参数更改时,您在上述订阅中的代码都会重新执行 AUTOMATICALLY 。因此无需再次手动调用ngOnInit。

答案 3 :(得分:1)

创建组件后调用

ngOnInit。所以你可以创建一个函数并再次调用该函数。这是示例代码。

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

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

private callFun(){
   // do code
}

答案 4 :(得分:1)

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

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