我在Firefox中遇到以下错误。不在Chrome或IE中。
“错误:./DefaultLayoutComponent类中的错误DefaultLayoutComponent - 内联模板:2:14导致:表达式在检查后发生了变化。上一个值:'over'。当前值:'side'。”。
这是一种侧面的样式,从材料设计中抛出这一点。
这是DefaultLayoutComponent html模板的第2行:
<md-sidenav (mouseover)="toggleHover(true)" (mouseout)="toggleHover(false)" (close)="sidenavToggle(false)" (open)="sidenavToggle(true)" [mode]="(_navigation.mediumScreenAndDown && sidenavStyle !== 'off') ? 'over':sidenavMode" [ngClass]="{'icon-sidenav': ((sidenavStyle === 'icon' || sidenavStyle === 'icon overlay') && _navigation.largeScreen), 'over': (sidenavStyle === 'icon overlay')}">
这是DefaultLayoutComponent打字稿中被调用以确定sidenavStyle的方法
public get sidenavMode(): string {
if(this.sidenavStyle === 'icon overlay' && this.isHovering) {
return 'over';
} else if(this.sidenavStyle === 'icon' || this.sidenavStyle === 'icon overlay') {
return 'side';
} else if(this.sidenavStyle === 'hidden') {
return 'over';
} else if(this.sidenavStyle === 'off') {
return 'over';
}
return this.sidenavStyle;
}
我已经确定这是一个更改检测问题,我发现这个stackoverflow Angular 2 - Expression has changed after it was checked,其中Gunter建议使用ngOnChanges然后检测这些更改,但我仍然抛出错误。
ngOnChanges() {
this.sidenavMode; //method where I am determining sidenav style
this.changeDetectorRef.detectChanges();
}
我试过这个,但我仍在抛出错误。任何帮助非常感谢。
答案 0 :(得分:0)
刚刚解决了我的问题。
constructor(private changeDetectorRef:ChangeDetectorRef, ngZone: NgZone) {
window.onresize = (e) => {
ngZone.run(() => {
//console.log("this.sidenavStyle = " + this.sidenavStyle);
this.sidenavStyle;
this.changeDetectorRef.detectChanges();
});
};
}
答案 1 :(得分:0)
有同样的问题...调试了一整天,直到我发现存在命名冲突:在控制器上声明了一个属性“userSchedule”,但是有一个“userSchedules”数组,这是以下列方式迭代:
<div *ngFor="let userSchedule of userSchedules; let row = index">
{{ userSchedule.customer }}
</div>
在将其更改为:
后,一切正常<div *ngFor="let userScheduleRow of userSchedules; let row = index">
{{ userScheduleRow.customer }}
</div>
注意:在我的情况下,它也是一个Firefox-olny问题;确切的错误信息是
检查后表情发生了变化。先前的值'false'。当前值'true'。