angular - onInit 函数抛出 ExpressionChangedAfterItHasBeenCheckedError?
问题描述
我正在学习Angular。我正在尝试实现,登录后页面重定向到主页。在我尝试过之后,
app.component.html
<header *ngIf='loggedIn'>
<h1>Test portal</h1>
</header>
<login *ngIf='!loggedIn' (homeVar)="loadHome()">Loading..</login>
<router-outlet></router-outlet>
app.component.ts
export class AppComponent implements OnInit {
loggedIn = 0;
constructor(private router:Router){}
ngOnInit(){
if(!this.loggedIn){
this.router.navigate(['']);
}
}
loadHome():void{
this.loggedIn=1;
this.router.navigate(['home']);
}
}
login.component.ts
export class loginComponent implements OnInit {
@Output() homeVar:EventEmitter<string> = new EventEmitter();
@SessionStorage() session:any = "";
ngOnInit(){
if(this.session != ""){
this.homeVar.emit(this.session);
}
}
check(){
this.session = "user";
}
}
上面的代码工作正常,但它给出了以下错误
ERROR 错误:ExpressionChangedAfterItHasBeenCheckedError:表达式在检查后已更改。以前的值:'ngIf: 0'。当前值:'ngIf:1'。
如何解决这个问题?
解决方案
而不是在 onInit 内发出事件,而是使用构造函数
export class loginComponent {
@Output() homeVar:EventEmitter<string> = new EventEmitter();
@SessionStorage() session:any = "";
constructor(){
if(this.session != ""){
this.homeVar.emit(this.session);
}
}
check(){
this.session = "user";
}
}
推荐阅读
- flutter - 如何在 Flutter web 上获取本地时区?
- react-native - FlatList scrollToIndex 到大数据中的一个项目
- excel - 无法通过 VBA 通过 Cells() 获取值
- php - 沉默 PHP 7.4.8 服务器请求日志“已接受”、“正在关闭”
- python - 覆盖父类中的函数
- reactjs - 在 React js Uncaught RangeError: Maximum call stack size exceeded at shouldFilterFiber at mountFiberRecursively
- apache - Mod_Rewrite:重写图像 URL 的 htaccess 规则
- python - 正确分组和聚合以避免随机效应问题
- azure - Azure WebAPP HTTP 请求持续时间
- php - Symfony 异常订阅者未触发