1

在我的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.tsHomeComponent(其片段在上面)。

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

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

4

1 回答 1

2

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

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

每次参数更改时,订阅都会收到通知。所以订阅方法中的代码每次都会执行。你不需要调用 ngOnInit。

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

于 2017-06-21T17:01:40.463 回答