【问题标题】:angular 4 Expression Changed After It Has Been Checked Error in app.component.ts在 app.component.ts 中检查错误后,角度 4 表达式已更改
【发布时间】:2017-10-10 07:28:17
【问题描述】:

我在应用程序内部某处注销后收到ExpressionChangedAfterItHasBeenCheckedError. Expression has changed after it was checked. Previous value: 'true'. Current value: 'false'. 错误,并且app.component.ts 中的front getter 在其视图中发生变化。

另外,如果我启用生产模式,错误不会出现!无论如何,这一切都有效,但我不想看到错误。

app.component.html

<div class="col-xs-12" [class.space]="!front">
            <router-outlet></router-outlet>
        </div>

app.component.ts

get front() {
        if (localStorage.getItem("user") === "\"admin\"") {
            return false;
        }
        return true;
    }

【问题讨论】:

  • 利用setTimeout()
  • 你能举个例子吗?我无法在超时时将整个东西包裹在 getter 中。
  • 这行得通吗:"\"admin\""?似乎不正确

标签: angular


【解决方案1】:

像这样将整个代码放在setTimeout

get front() {
  return new Promise(resolve => setTimeout(() => {
    if (localStorage.getItem("user") === "\"admin\"") {
      resolve(false);
    }
    resolve(true);
  }, 200));
}

【讨论】:

  • getter 不返回值
  • @yurzui 是的,你需要明确地为它分配一个变量,然后在 getter 中使用它
  • 我首先不能在组件内使用let。其次,我不应该有一个吸气剂,而只是一个普通的财产吗?就这样不行,能不能全部给个?
  • 我在类本身中有value,然后在ngOnInit 中有setTimeout,但如果这就是你的意思,它就不能按预期工作?
  • 如果你在 calss 中有值,只需使用 this.value 然后分配相同的值,然后在 getter 中返回值
猜你喜欢
  • 2018-05-11
  • 2018-11-06
  • 1970-01-01
  • 2020-11-19
  • 2017-10-19
  • 2019-05-14
  • 2018-05-10
  • 2017-06-23
  • 2020-06-29
相关资源
最近更新 更多