当前位置: 首页 > 知识库问答 >
问题:

Angular 8 -如何解决“ExpressionChangedAfterItHasBeenCheckedError”

邹英发
2023-03-14

我有一个将文件上传到数据库的组件。当文件上传时,我显示一个覆盖图,显示所选文件的数量和成功上传的文件数量。

我希望当上传的文件数量等于选择的文件数量时,覆盖图自动关闭。但是,我的实现导致了以下结果:

expressionchangedafterithasbeencheckedererror:检查后表达式已更改。以前的值:“ngIf: true”。当前值:“ngIf: false”

当选择上传文件时,我将overlay_uploadImage设置为true。这将显示覆盖。在覆盖图中,我有下面的div。我的意图是当上传计数等于选择上传的文件数量时,调用<code>overlay_uploadImage</code>函数。此函数将overlay_uploadImage设置为false,从而隐藏覆盖容器

 <div *ngIf="uploadCount == files.length?overlay_uploadImage:false"></div>

满足条件时调用的函数

overlay_imageUploads(){
    this.files = [];
    this.overlay_uploadImage = false;
}

共有3个答案

尹善
2023-03-14

您可以手动要求角度检测更改以消除此错误:

js prettyprint-override">import {ChangeDetectorRef} for '@angular/core';
[...]
    constructor(private cd: ChangeDetectorRef){}

    [...]

    overlay_imageUploads(){
        this.files = [];
        this.overlay_uploadImage = false;
        this.cd.detectChanges();
    }
    [...]

劳和歌
2023-03-14
    constructor( private changeDetect: ChangeDetectorRef )

    overlay_imageUploads(){
    if (!(this.changeDetect as ViewRef).destroyed) {
          this.changeDetect.detectChanges()
          // do other tasks
          this.files = [];
          this.overlay_uploadImage = false;
      }
    }

此代码将强制更改值。

参见参考文献:https://angular.io/api/core/ChangeDetectorRef

朱季
2023-03-14

当angular检查一个值,然后该值发生变化时,就会出现此错误,因为它不会中断,所以不是“错误”

我建议你使用不同的语法:

 <div *ngIf="overlay_UploadImage  && uploadCount === files.length"></div>
 类似资料:
  • 问题内容: 我正在尝试编写简单的Java代码,以在控制台上显示MongoDB集合。我在类路径中添加了mongodb-driver-3.0.0.jar。 但是,当我尝试执行代码时,它在数据库连接行给了我以下错误: 线程“主”中的异常java.lang.NoClassDefFoundError:com.montan.app.MongoDbJdbc.main(MongoDbJdbc.java:12)上的

  • 问题内容: 我试图通过我的Web项目上的applet访问客户端的临时目录。 当我自己运行小程序时,它毫无问题地得到了。 当我尝试使用javascript并调用applet方法在我的项目上获取它时,我在javascript控制台上运行。当我尝试读取temp目录下的文件时,我也遇到同样的异常。 这正是我所看到的: 怎么解决? 问题答案: 最简单的解决方案是对applet进行签名。

  • 问题内容: 我已经尝试了Oracle Java教程中的两个示例。它们都可以正常编译,但是在运行时都出现以下错误: 我想我可能将Main.java文件放在错误的文件夹中。这是目录层次结构: 这里是 我在这里做错了什么? 更新 将Main类放入graphics包中(添加package graphics;到其中)后,将类路径设置为“ _test”(包含图形的文件夹),进行编译,然后使用java grap

  • 问题内容: 我有2个函数,都返回诺言: 现在,我有了一个清单,在这两个诺言得到解决后,我想立即更新 已解决的主题应如下所示 问题答案: 创建一个承诺,当您通过的所有承诺均被拒绝或 任何 拒绝时,该承诺都会自动解决。 如果像您一样将其传递给数组,则处理成功解析的函数将收到一个数组,其中每个项目都是针对相同索引的诺言的分辨率,例如: 我个人认为传递对象更具可读性,这样您就可以在处理程序中获得一个对象,

  • 我在Oracle的Java教程中尝试了这两个示例。它们都可以很好地编译,但在运行时都会出现以下错误: 我想我可能有文件位于错误的文件夹中。 以下是目录层次结构: 这里是: 我做错了什么? 更新 在我将类放入包(我添加了)之后,将类路径设置为“_test”(包含图形的文件夹),编译它,并使用(从命令行),它工作了。 更新非常晚#2 我没有使用Eclipse(只是记事本和JDK),上面的更新解决了我的

  • 我已经在Oracle的Java教程中尝试了这两个示例。它们都编译得很好,但在运行时,都出现了以下错误: 我想文件可能在错误的文件夹中。 非常晚的更新#2 我没有使用Eclipse(只有记事本++和JDK),上面的更新解决了我的问题。然而,似乎这些答案中有许多是针对Eclipse和IntelliJ IDEA的,但它们有相似的概念。

  • 问题内容: 我已经编写了一些代码以连接到我的邮件服务器并阅读电子邮件。我正在使用通过SSL连接的POP3。我还向SSL密钥库添加了SSL证书。但是我仍然遇到同样的例外。请帮忙。提前致谢。 问题答案: 导致此异常的可能原因是,密钥库中的证书与服务器中的证书不匹配。 检出这些链接可能对您有帮助: 由于PKIX路径构建失败而无法连接到SSL服务sun.security.provider.certpath

  • 我已经在Oracle Linux上安装了Oracle Weblogic 11g,并尝试使用jdeveloper 11g完成Oracle的一个ADF教程。当我运行我的项目时,它编译成功,没有错误。它开始将应用程序部署到weblogic服务器,并打开默认的internet浏览器。但随后出现错误“500 Internal server Error”。 我收到以下错误: <代码>java。lang.NoC