子组件中的 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 的相关文章

  • 如何访问父组件上定义的 ViewChild 引用 - Angular 2

    我在应用程序模板 根组件的模板 中定义了一个微调器 加载器元素 例如 div div 在我的子组件中 我尝试使用访问它 ViewChild但这似乎总是返回未定义 我在子组件中访问它的代码是 ViewChild spinner read Vi
  • Angular 2:将路由器出口设计为宽度 < 100%

    我正在构建一个 Angular 2 应用程序 该应用程序将为宽度超过 500 的屏幕提供侧导航栏 为宽度小于 500 的屏幕提供底部导航栏 现在 我尝试为侧栏分配 20 的宽度 即 80 应用内容 我遇到的问题是路由器出口内容 即实际的应用
  • Angular 6 http.delete 请求不起作用

    我似乎无法让我的删除请求发挥作用 我已经完成了所有的获取请求 但现在我被困在删除上 似乎无法理解它 console log 的 URL 始终正确 并且删除请求通过 Postman 工作正常 有什么想法吗 HTML
  • ng-bootstrap ngbDropdown 在 Angular 4 中不起作用

    在我的 Angular 4 应用程序中 ng bootstrap 中的 ngbDropdown Element 不起作用 对于这种情况 我安装了以下 npm 模块 ng bootstrap ng bootstrap 1 0 0 alpha
  • 从版本 14 更新到 15 后,Angular $localize 错误

    从版本更新我们的 Angular 应用程序后14 0 4到版本15 1 3 之前也尝试过15 1 2 我们在尝试访问该应用程序时收到以下错误 Uncaught Error It looks like your application or
  • Angular 2 货币管道货币和数字之间的空间?

    我注意到 Angular 2 中有一个名为CurrencyPipe 的管道 它将过滤数字中的一些小数 这还添加了 ISO 货币指示器 即 美元 或任何其他本地货币 我的问题是输出显示如下 USD123 USD 和 123 之间没有空格 这真
  • Angular 8 中的 ag-grid 单元格内未显示字体真棒图标

    我正在尝试学习 Angular 因此遵循有关安装和使用 ag grid 和 Font Awesome 的指南 但我无法使用 cellRenderer 在 ag grid 单元格内显示 fa icon 如果我在网格之外使用相同的图标 HTML
  • Angular:DOM更新后调用方法

    我正在从 html 调用一个方法 调用休息服务 来增加 减少屏幕上的计数 现在我想调用另一个方法 即 getThreshold 来检查计数是否达到阈值 如果是 我想显示一条确认消息 我想首先更新屏幕上的计数 然后调用该函数来检查它是否达到阈
  • ionic2 对菜单项应用 ngx-translate

    我正在使用 ngx translate 来支持多语言 并且运行良好 但我也想申请菜单项 我该如何实现这一目标 我有 3 个菜单项 我想更改每个标题的语言 ts file appPages PageObj title Profile comp
  • 如何使 Angular Reactive Formarray 中的级联下拉菜单工作而不弄乱下拉值

    我有一个角度 4 的表单 其中包含名字 姓氏和一个包含 2 个下拉菜单 选择 的表单数组 用作级联下拉菜单和一个删除按钮 表单的其余部分还包含一个发送按钮和一个添加选项按钮 我在此处添加了屏幕截图 以便您更好地理解 表单添加 删除按钮和发送
  • 如何在 angularjs 4 中设置 http 调用超时?

    我在 angularjs 4 官方页面上看到过 https angular io guide http https angular io guide http 设置http调用超时但我没有找到任何参考 有人尝试过设置吗 谢谢 如果您使用 R
  • Angular2 中 Http 的 Promise 与 Observable? [复制]

    这个问题在这里已经有答案了 本质上 正如标题所说 是否有任何理由使用可观察的承诺 https stackoverflow com questions 37364973 angular 2 promise vs observable为了进行
  • 将 SCSS 与使用 angular-cli 创建的 Angular 库结合使用

    我创建了一个角度库项目 我想在其中使用 SCSS 样式 所以我已经配置了 ng config schematics schematics angular component styleext scss 这进入了角度 json file sc
  • 角度2中未定义的值

    我正在创建一个应用程序 在其中使用 Ag Grid api 在网页上列出我的数据库内容 Ag grid 有一个预定义的 api 来获取所选行的内容 这是我的代码 export class customer entryComponent pu
  • 单击上一页的按钮路由到该页面后如何刷新页面

    我有 2 个页面 一个主页和一个页面 2 当我单击主页上的按钮时 它会路由到 page2 现在 单击主页上的按钮后 当我到达第 2 页时 它应该刷新 因为我的项目中存在一些缓存问题 我在ngoninit上添加了window location
  • 在 Angular 6 服务中获取当前路由参数的最佳方法是什么?

    我试图找出在 Angular 6 中获取当前路由参数的最佳方法是什么 目前我必须通过ActivatedRoute到服务的方法作为参数 然后在服务中使用它 export class MainComponent constructor priv
  • 如何在Angular2中正确使用依赖注入(DI)?

    我一直在试图弄清楚 DI 依赖注入在 Angular2 中是如何工作的 每次当我尝试将服务 或类注入我的组件时 我都会遇到很多问题 从不同的谷歌搜索文章中 我需要使用providers 在组件配置中 或者有时我需要使用 Inject 在我的
  • 导航嵌套组件时创建面包屑 (Angular 2)

    我正在为此苦苦挣扎 这个想法是有一个组件 当浏览子视图时更新面包屑 例如
  • 如何使用降级 Module() 引导应用程序与 ui-router 混合

    我正在使用 ui router 混合 https github com ui router angular hybrid https github com ui router angular hybrid 引导 经典 方式 我们在数据网格中
  • 在哪里存储角度中的 JWT 令牌?

    我正在使用 Django 和 Angular 构建一个应用程序 目前 我正在本地存储上存储后端发出的 JWT 但是 我担心 XSS 攻击 我应该使用仅 HTTP 的 cookie 来存储令牌吗 我还考虑将令牌存储在我的身份验证服务类中的变量

随机推荐

  • 通过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