如果路由器从其自身导航到当前路由(具有新查询参数),则不会调用Angular 2+ ngOnInit()

时间:2017-06-21 16:48:12

标签: angular angular-router

在我的home.component.ts中,我的ngOnInit方法是:

ngOnInit() {
    console.log("ngoninitcalled");
    this.activatedRoute.queryParams.subscribe((params:Params) => {
        let refresh = params['refresh'];
        if(refresh){
            // do something refreshing
        }
    }
}

这是我的customFunction

customFunction(email: string, username:string) {
    // do something custom
    this.router.navigate([''],{queryParams: {refresh:true}});     
}

''路由重定向到home.component.ts或HomeComponent(其上面的片段)。

在检查控制台日志时,我看到当使用来自其他组件的刷新参数调用HomeComponent时(通过this.router.navigate([''], {queryParams: {refresh:true}}),将调用ngOnInit()。但是如果它从HomeComponent本身调用(如上面的代码),则不调用ngOnInit()。

这是预期的行为,我可以在我的自定义函数中的this.ngOnInit()之后安全地调用router.navigate来手动调用ngOnInit()(假设ngOnInit永远不会被调用HomeComponent被重定向到自己)?

1 个答案:

答案 0 :(得分:2)

当导航到具有不同参数的相同组件时,预计不会调用ngOnInit。

但你应该手动调用ngOnInit。

每次参数更改时,都会收到订阅通知。因此,subscribe方法中的代码每次都会执行。你不需要打电话给ngOnInit。

通过在订阅中移动console.log来尝试。