【发布时间】:2017-07-09 05:49:45
【问题描述】:
我在 Firefox 中收到以下错误。不在 Chrome 或 IE 中。
“错误:./DefaultLayoutComponent 类 DefaultLayoutComponent 中的错误 - 内联模板:2:14 原因:检查后表达式已更改。以前的值:'over'。当前值:'side'。”。
这是来自 Material Design 的 sidenav 样式。
这是 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();
}
我已经尝试过了,但我仍然抛出错误。非常感谢任何帮助。
【问题讨论】:
-
不要试图虐待任何人 Arjan。很抱歉我的引语打扰了您,但它们是我的 html 的一部分。我猜你在引用我的错误信息时遇到了问题。以后我会尽量注意这一点。希望你有一个美好的一周。
-
我现在明白你在说什么 Arjan。谢谢。
标签: angular