ExpressionChangedAfterItHasBeenCheckedError 在生产中

ExpressionChangedAfterItHasBeenCheckedError in Production

版本详情

我读到了这个错误,发现它无法进入生产环境,但我在生产环境中遇到了 ExpressionChangedAfterItHasBeenCheckedError。

错误信息:

ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. Previous value:'ng-valid: true'. Current value: 'ng-valid: false'.

Angular.json中的配置:

"qa": {
              "fileReplacements": [
                {
                  "replace": "src/environments/environment.ts",
                  "with": "src/environments/environment.qa.ts"
                }
              ],
              "optimization": true,
              "outputHashing": "all",
              "sourceMap": false,
              "extractCss": true,
              "namedChunks": false,
              "aot": true,
              "extractLicenses": true,
              "vendorChunk": false,
              "buildOptimizer": true,
              "serviceWorker": true
            },

构建脚本

node --max_old_space_size=5048 ./node_modules/@angular/cli/bin/ng build --prod --configuration=qa

问题:

My question is How am I getting this error in production and how can I fix it?

已更新

I just noticed this line Angular is running in the development mode. Call enableProdMode() to enable the production mode.

问题:

所以我 运行 这个脚本用于构建我还需要做些什么来启用生产? node --max_old_space_size=5048 ./node_modules/@angular/cli/bin/ng build --prod --configuration=qa

Image of error in browser:

Image of environment

Main.ts应包含以下内容:

import { enableProdMode } from '@angular/core';
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';

import { AppModule } from './app/app.module';
import { environment } from './environments/environment';

if (environment.production) {
  enableProdMode();
}

platformBrowserDynamic().bootstrapModule(AppModule)
  .catch(err => console.log(err));

所以,有两件事需要为真。这需要存在于上方 main.ts 中,并且您的 environment.qa.ts 文件必须具有 production = true。验证之后,在这里设置一个断点,以确保值是你认为的值。

补充思考

你没有问,但我还是要提供 - 你需要修复错误。 ExpressionChanged... 错误的存在表明您的应用程序逻辑存在问题 - 很可能是您在 lifecycle hooks(例如 AfterContentInit)之一中操作变量。这不太可能产生明显的影响,但您可能会因此错误而遇到一些奇怪的错误。