生产中的ExpressionChangedAfterItHasBeenCheckedError

时间:2019-10-09 12:13:20

标签: angular devops production-environment

版本详细信息

  • 角版本:7.3.7

我阅读了此错误,发现该错误无法在Production中获得,但在生产环境中却收到了ExpressionChangedAfterItHaHasBeenCheckedError。

错误消息:

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

问题:

  

我的问题是如何在生产中收到此错误,如何解决?

已更新

  

我刚刚注意到这一行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:

img

Image of environment

img

1 个答案:

答案 0 :(得分:2)

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)中操作了一个变量。这不太可能产生明显的效果,但是由于此错误,您可以遇到一些奇怪的错误。