为啥 Angular Oninit 仅在离开页面时才调用服务
Posted
技术标签:
【中文标题】为啥 Angular Oninit 仅在离开页面时才调用服务【英文标题】:Why does Angular Oninit only call service when navigated away from page为什么 Angular Oninit 仅在离开页面时才调用服务 【发布时间】:2021-10-09 12:23:12 【问题描述】:使用 Angular 路由器,当用户导航到 SPA 的某个页面时,我想通过调用ngOninit
中的服务来检查用户是否已通过身份验证,以便将登录或注销按钮显示为情况可能是。但是ngOninit
不会触发,只会在我离开相关页面时触发。可能是什么原因造成的,我是否错过了生命周期挂钩课程?
export class HomeComponent implements OnInit
loggedIn? = false;
constructor(private authservice: AuthenticationService)
ngOnInit(): void
this.authservice.loadUserCredentials()
.subscribe(
next: res =>
console.log('res ',res)
this.loggedIn = res;
)
```
【问题讨论】:
要检查用户身份验证,您需要使用 auth Guards not a service in ngOnInit 阅读更多相关信息angular.io/api/router/CanActivate @KamranKhatti 我现在不想保护任何路线,我只想调用一个服务来检查用户是否经过身份验证,以便显示适当的按钮、登录或登录-出去。我已经重构让导航栏包装路由器插座,而不是在每个组件中都有导航栏,这是设计使然。并且这个问题已经被规避了。但我仍然想知道为什么 ngOninit 仅在我离开组件时才会触发。 【参考方案1】:export class HomeComponent implements OnInit
loggedIn? = false;
constructor(
private authservice: AuthenticationService,
private router: Router,
)
ngOnInit(): void
this.router.events.subscribe((ev) =>
if (ev instanceof NavigationEnd)
// Call your authenticate method
在我的 ionic-angular 应用程序中,我是这样做的。
【讨论】:
这看起来可以在 Angular 中工作,虽然我已经重构以规避这个问题,但会尝试一下并回复你。以上是关于为啥 Angular Oninit 仅在离开页面时才调用服务的主要内容,如果未能解决你的问题,请参考以下文章
当我们谈论 OnInit 时,Angular 2+ 中组件初始化的确切含义是啥?