【发布时间】:2019-11-12 18:53:48
【问题描述】:
import { Component, OnInit } from '@angular/core';
import { OktaAuthService } from '@okta/okta-angular';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.scss']
})
export class AppComponent {
public title = 'my-project';
public isAuthenticated: boolean;
constructor(public oktaAuth: OktaAuthService) {
this.oktaAuth.$authenticationState.subscribe(
(isAuthenticated: boolean) => this.isAuthenticated = isAuthenticated
);
}
async ngOnInit() {
this.isAuthenticated = await this.oktaAuth.isAuthenticated();
}
login() {
this.oktaAuth.loginRedirect();
}
logout() {
this.oktaAuth.logout('/');
}
}
我是 Angular 的新手,当我看到这段代码时,我真的很困惑。我读了一些文章,我知道构造函数是初始化一个类,ngOnInit 是在构造函数之后运行。 但在代码中,
- 构造函数和ngOnInit之间的逻辑是什么?对于我的 理解,在构造函数中,它监听赋值 函数,并在构造之后,通过分配初始化类 oktaAuth.isAuthenticated()
- 何时更改 isAuthenticated 变量?
- 为什么我们需要异步 ngOnInit()?
- 如果我们想要同步方式,该怎么做?
【问题讨论】:
-
仅供参考,AngularJS 暗示您使用的是旧的 Angular(版本
-
@TomFaltesek 感谢您指出
-
并且使
ngOnInit()async awai,组件渲染的加载正在停止。而且用户体验很差。 Constructor() 用于在类中定义服务 DI,类也没有完全加载到 Dom。当类完全加载到 Dom 时调用 ngOnInit()。这样我们就可以在这里分配默认属性值
标签: javascript angular okta