子组件中的 ExpressionChangedAfterItHasBeenCheckedError

2023-11-23

我有一个父组件,它每秒更新一次其数组myValue。在子组件中,我想创建一个图表,该图表使用该数组作为数据,并在每次父组件更新时更新。

当我运行此应用程序时,我收到此错误:

错误:ExpressionChangedAfterItHasBeenCheckedError:表达式有 检查后更改了。以前的值:“隐藏:true”。当前的 值:'隐藏:假'。

这是我的父组件:

@Component({
  selector: 'app-parent',
  templateUrl: './parent.component.html',
  styleUrls: ['./parent.component.scss']
})
export class ParentComponent implements AfterContentInit, OnDestroy {

    private myValues: MyValue[];
    private alive: boolean;

    constructor(private valueService: ValueService) {
    this.alive = true;
    this.myValues = [];
  }

  ngAfterContentInit(): void {
    TimerObservable.create(0, 1000)
      .takeWhile(() => this.alive)
      .subscribe(() => {
        this.valueService.doSmth().subscribe(
          value => {
            this.myValues.push(value);
          }
        );
      });
  }
...

}

父模板如下所示:

<ul>
  <li *ngFor="let value of myValues">
    <p>{{value.name}}</p>
  </li>
</ul>

<app-value-chart [chartData] = myValues></app-value-chart>

这是我的子组件:

@Component({
  selector: 'app-value-chart',
  templateUrl: './value-chart.component.html',
  styleUrls: ['./value-chart.component.scss']
)}
export class ValueChartComponent implements AfterViewInit {
  @Input() chartData: MyValue[];

  chart: any;

  ngAfterViewInit(): void {
    this.createChart(); // creates chart with ChartJS
    const tmp: number[] = [];
    for (let i = 0; i < this.chartData.length; i++) {
      tmp.push(this.chartData[i].x);
    }
    this.chart.data.datasets[0].data = tmp;
    this.chart.update(0);
  }
...
}

子模板:

  <canvas id="canvas" responsive>{{ chart }}</canvas>

我该如何解决我的问题?

我用的是 Angular 6。


您可以在以下位置找到有关该异常的详细说明本文。消除异常的一种技术是强制进行更改检测ChangeDetectorRef.detectChanges:

export class ValueChartComponent implements AfterViewInit {

    constructor(private cd: ChangeDetectorRef) { }

    ngAfterViewInit(): void {
        ...
        this.cd.detectChanges();
    }

    ...
}

另一种技术是异步运行处理程序代码setTimeout:

export class ValueChartComponent implements AfterViewInit {

    ngAfterViewInit(): void {
        setTimeout(() => {
            ...
        });
    }

    ...
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

子组件中的 ExpressionChangedAfterItHasBeenCheckedError 的相关文章

  • Angular 2 重复标头

    使用时出现重复标头问题
  • 使用服务中的可观察量测试错误情况

    假设我有一个订阅服务功能的组件 export class Component ngOnInit this service doStuff subscribe data IData gt doThings data error Error g
  • 观众:覆盖单个测试的提供者(角度通用)

    我构建了一个小型角度应用程序 现在正在编写单元测试 到目前为止一切顺利 但是当我尝试测试我的 authGuard 时 我遇到了一些问题 我在用观众 https github com ngneat spectator 我在规范的提供者部分中提
  • 如何调试超时等待异步 Angular 任务?无法在角度页面上找到元素

    编辑 请注意 在 ernst zwingli 的帮助下 我找到了问题的根源 因此 如果您遇到相同的错误 他指出的修复之一可能会帮助您 我的问题是量角器本身的一个已知问题 如果您认为这可能是您 我已经扩展了我的步骤 以在我最初的问题之后查明问
  • Angular 2 获取当前路线

    所以我需要以某种方式检查我是否在主页上执行某些操作 而在其他页面上则不执行此操作 该组件也在所有页面上导入 如果我在主页上 如何检测该组件 Thanks 尝试这个 import Router from angular router expo
  • Angular Libraries Monorepo:是否可以为每个库使用不同的版本?

    只是一个简单的问题 我似乎找不到答案 我正在尝试构建一个应该能够使用 angular cli v8 的 monorepo 但仍然能够编译和构建为 v2 v3 v4 等制作的库 主要是组件和服务 版本之间发生了很多变化 所以让我们举个例子 V
  • 设置 Angular 2 http 请求的基本 url

    我正在尝试为所有 Angular 2 http 请求设置基本 url 以下是我的应用程序的基本设置 class HttpOptions extends BaseRequestOptions url string http 10 7 18 2
  • 模块解析失败:意外的标记 (4:0)

    我正在尝试将 FULLCALENDAR 添加到我的 Angular v14 项目中 但在所有设置之后我突然面临这个错误 知道如何处理这个错误吗 包 json fullcalendar angular 5 11 0 fullcalendar
  • 如何在 Angular 4 中的 HTML 中包含或排除属性

    我正在使用 Angular 4 和 Angular 材料来构建一张桌子 我想要mat sort header有条件地添加到以下模板中
  • Angular 提供的服务在 VS forRoot 中

    我想知道这两个代码块是否等效 我可以用吗providedIn与以下结果相同forRoot Injectable providedIn root export class MyService constructor vs Injectable
  • 无法读取未定义的“触及”属性

    为什么我会收到此错误无法读取未定义的属性 为什么无法读取formName controls email touched但它能够阅读formName get custDetails touched
  • 在 *ngFor 循环内使用 Angular i18n 和 Angular 5

    我想在模板中的 ngFor Loop 内使用动态翻译 如下所示
  • 如何将 HTML 字符串从 component.ts 传输到 component.html

    我想问一下如何将HTML格式的字符串从 component ts文件到 component html file 在我的应用程序中有一个布局文件夹 这layout component ts文件有代码 import Component OnIn
  • TypeScript 编译速度极慢 > 12 秒

    只是把它放在那里看看其他人是否也遇到这个问题 我已经使用 webpack 作为我的构建工具 使用 typescript 构建了一个 Angular 2 应用程序 一切都运行良好 但是我注意到 typescript 编译超级超级慢 我现在只有
  • Angular 2 链式 Promise 并传递拒绝

    应该是一个简单的问题 但是我找不到有关如何做到这一点的文档 像这样链接一个承诺 Making a promise no problem let promise new Promise resolve reject gt let data d
  • 如何在 Angular 4 项目中使用 ActiveXObject

    我正在尝试使用 ActiveXObject 如下所示 getActiveXObject pdfCtrl return new ActiveXObject pdfCtrl checkPDF let plugin null if this ge
  • 如何使 Angular2 Service 单例?

    我正在尝试在我的应用程序中实现身份验证防护 IE 只有经过身份验证的用户才能访问我的应用程序的某些路由 我正在遵循给出的意见here https angular io docs ts latest guide router html 用户登
  • 在 angular2 中过滤数组

    我正在研究如何在 Angular2 中过滤数据数组 我研究过使用自定义管道 但我觉得这不是我想要的 因为它似乎更适合简单的表示转换 而不是过滤大量数据 数组排列如下 getLogs Array
  • ng-cli 6 和 font Awesome 图标不起作用

    我正在使用 font awesome 4 70 Angular 6 0 8 和 cli 6 0 8 完整版本如下 我正在尝试用 cli 的 ng build 替换我们现有的 webpack 进程 我遇到了 font Awesome 图标未显
  • ngmodel与Angular2中复选框的动态数组绑定

    我有一个 Angular 2 组件 其中我从数组生成复选框列表 现在我需要根据选中的复选框填充不同的数组 这应该是双向绑定 这意味着如果复选框的值已在数组中 则必须已经检查了复选框 我在 Angular 1 中使用了一个名为 checkli

随机推荐

  • 通过environment.yml使用conda安装npm包

    我想知道是否可以直接通过 conda 安装 npm 包environment yml文件 我知道可以安装pypi包与pip直接如下 name docs channels conda forge dependencies python gt
  • 什么是 Android“提取文本 UI”?

    我最近遇到了一个错误 我的小 EditText 不断膨胀以填充软键盘未占用的任何空间 但仅限于横向模式 我发布了此内容 并得到了一位乐于助人的 StackOverflow 成员的快速回复 我需要添加该内容android imeOptions
  • 如何在cakephp表单中使用jquery.validate插件

    我的 jQuery 代码是 document ready function StudentRegisterForm validate rules email required true email true 在我的表单电子邮件中 td td
  • Bgr32 PixelFormat 中的第四个通道是什么

    我目前正在用 C 做一些图像处理工作 我对 Bgr32 Pixel 格式感到困惑 以下描述来自于microsoft msdn http msdn microsoft com en us library system windows medi
  • Android 上的 Apache Commons 编解码器:找不到方法

    今天我尝试将 apache commons codec 包包含在我的 Android 应用程序中 但无法运行它 Android 无法找到方法 ord apache commons codec binary 并在 DDMS 中输出以下错误 0
  • Jquery UI 日期选择器。禁用日期数组

    我一直在尝试寻找 Jquery ui datepicker 问题的解决方案 但没有运气 这就是我想做的 我有一个应用程序 我正在执行一些复杂的 PHP 操作来返回一个 JSON 日期数组 我希望将其阻止在 Jquery UI Datepic
  • sin 和 cos 的向量化

    我正在玩编译器资源管理器并遇到了异常 我认为 如果我想让编译器向量化一个sin计算 using libmvec 我会写 include
  • C# 正则表达式排除字符串

    我得到了一个字符串集合 我想要的正则表达式就是收集所有以 http 开头的 href http www test com cat 1 one piece episodes href http www test com cat 2 movie
  • 有没有办法标记 docker 镜像中的前一层或恢复提交?

    假设有一个 docker 镜像 有人对其进行了更改 然后将其推送到 docker 存储库 然后我拉下图像 有没有办法获取该图像并运行上一层的容器 运行更改之前的版本 如果我运行 docker History 它将看起来像这样 docker
  • 如何克服“错误:在注册表中找不到对象‘jupyter.widget’”?

    我在 kubernetes 上的 jupyterhub 中运行 jupyterlab 我正在尝试使用例如显示小部件 from ipywidgets import interact interact x 0 100 10 def p x 50
  • 当创建的类也需要运行时值时进行依赖注入?

    假设您将系统划分为价值对象和服务对象 如 开发面向对象的软件 由测试引导 中所建议的 Misko Hevery 将这些对象称为 可更新对象 和 可注入对象 当您的值对象之一突然需要访问服务来实现其方法时会发生什么 假设您有一个很好的简单 V
  • Keras 在拟合期间淹没 Jupyter 单元输出(详细 = 1)

    当使用 verbose 1 选项在 Jupyter 笔记本中运行 keras 模型时 我开始得到的不是像以前那样的单行进度状态更新 而是批量更新的大量状态行 参见附图 重新启动 jupyter 或浏览器没有帮助 Jupyter笔记本服务器是
  • 多个日期范围重叠比较:如何有效地进行?

    要检查两个不同日期范围内的重叠 Start1 End1 and Start2 End2 我正在查 if Start1 lt End2 End1 gt Start2 overlap exists 问题是 如果我有五个日期范围 比较重叠的好方法
  • strcpy 当目标缓冲区小于 src 缓冲区时

    我试图了解 strcpy 和 strncpy 的区别 缺点 有人可以帮忙吗 void main char src this is a long string char dest 5 strcpy dest src printf s n de
  • 如何在Oracle动态SQL中转义“:”并且还具有绑定变量?

    我正在尝试将以下内容设为动态 SQL 但是 角色搞砸了 alter session set events sql trace sql asasasaass Example declare l trc cmd varchar2 500 l s
  • 时间表的数据库架构

    有人可以帮助我为时间表应用程序提供一个粗略的数据库架构吗 为不同的项目存储一段时间 2 周 内每天的小时数 前任 A 可以在同一天为项目 A 投入 3 小时 为项目 B 投入 4 小时 使其能够轻松获取项目总投入时间的报告 或者获取某个人所
  • VS2010静态链接问题

    我公司最近从VS2005升级到VS2010 我们有一个巨大的项目 其中使用了许多静态链接到 exe 中的模块 但是VS2010中的链接似乎存在一些问题 为了解释我们的问题 我们构建了一个最小的示例项目 其组成如下图所示 有一个应用程序使用库
  • GetHostEntry() 不再解析地址

    我最近从 NET v3 5 切换到 v4 0 Client Profile 第一次运行 GetHostEntry 时遇到问题 tcpClient SocketInfo SourceName remoteMatcher Host 88 255
  • Android 使地图上的蓝点消失或移除 v2

    我正在尝试替换我的应用程序地图上的蓝点 我的目的是显示一个图标形状的平面 而不是通常的蓝点 我实现了这一点并且它完美地工作如下 GoogleMap OnMyLocationChangeListener myLocationChangeLis
  • 子组件中的 ExpressionChangedAfterItHasBeenCheckedError

    我有一个父组件 它每秒更新一次其数组myValue 在子组件中 我想创建一个图表 该图表使用该数组作为数据 并在每次父组件更新时更新 当我运行此应用程序时 我收到此错误 错误 ExpressionChangedAfterItHasBeenC