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



在我的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(其片段如上(。

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

那么这是预期的行为吗,我可以在自定义函数中的router.navigate之后安全地调用this.ngOnInit()以手动调用ngOnInit()(假设如果从自身重定向到ngOnInit将永远不会调用(?

预期行为是,当导航到具有不同参数的同一组件时,不会调用 ngOnInit。

但是您不应该手动调用ngOnInit。

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

通过在订阅中移动主机.log尝试一下。

最新更新