我使用Angular 9,并且使用RouterModule。我在某处读到ngOnInit()函数在两次导航之间仅调用一次,我的意思是每个组件仅初始化一次(ngOnInit()函数)。我发现这是不正确的。
我的代码示例:首先,localhost / home加载HomeComponent,然后调用以下ngOnInit():
ngOnInit(): void
{
console.log('init home component');
}
然后,在HomeComponent中,我使用[routerLink]导航到localhost / user加载UserComponent和下面的ngOnInit()称为:
ngOnInit(): void
{
console.log('init user component');
}
最后,在UserComponent中,我使用[routerLink]导航到localhost / home再次加载HomeComponent,并调用了以下ngOnInit():
ngOnInit(): void
{
console.log('init home component');
}
结果,HomeComponent DOES再次初始化。我想念什么吗?谢谢!
Angular 9.x组件将在每次加载时初始化,并且在使用ngOnInit()
装饰器时将始终运行OnInit
。但是,模块和单例服务的加载方式可以不同。
例如,您可以延迟加载模块:
https://angular.io/guide/lazy-loading-ngmodules
或者让服务仅加载一次(例如,如果您希望变量保持不变):