在我的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被重定向到自己)?
答案 0 :(得分:2)
当导航到具有不同参数的相同组件时,预计不会调用ngOnInit。
但你应该不手动调用ngOnInit。
每次参数更改时,都会收到订阅通知。因此,subscribe方法中的代码每次都会执行。你不需要打电话给ngOnInit。
通过在订阅中移动console.log来尝试。