Angular2更改检测“表达式在检查后已更改”

2024-05-10

我在 Angular2(最终版本)中遇到了有关组件之间的更改检测和数据流的问题。我已经解决了这个问题,但对我来说似乎有点老套 所以想知道是否有更好的方法。

基本上我有一个组件 A,它有一个子组件 B,还有 *ngFor 创建多个子组件 C。

对于每个组件 C,都有一个 @Output定义在父组件 A 中为 C 的每个实例进行处理。根据该输出,确定组件 A 上的另一个属性(只是一个数字),并将其用作@Input在组件 B 上。

在 DEV 模式下,每次@Output在组件 C 中被触发,我在控制台中收到以下错误:

Expression has changed after it was checked. Previous value: XX. Current value: XX.

从阅读内容来看,由于 Angular2 中的单向数据流,这是一种预期。我想知道如何让它在我的场景中正常工作?

我暂时注射了ChangeDetectorRef在组件A中并调用它的detectChanges()处理函数中的方法@Output来自 C 实例的事件。 我担心它的效率不是很高。我可能可以尝试改进它并仅在最后一个项目的事件之后调用它(所有 C 组件同时发送该事件),但随后我会担心事件的异步性质和一些意外行为。

有谁知道如何克服这个问题?我的设计在组件之间的数据流方面是否存在根本缺陷? 我应该寻求共享服务之类的东西来代替交换数据吗?

非常感谢任何帮助。


你可以注射private cdRef:ChangeDetectorRef并打电话this.cdRef.detectChanges()在......的最后ngOnChanges()。这样,Angular 会再次运行更改检测,并且不会抱怨之前修改的模型值。

class MyComponent {
  constructor(private cdRef:ChangeDetectorRef) {}

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

Angular2更改检测“表达式在检查后已更改” 的相关文章

随机推荐

  • SlidingTabLayout 中自定义未选择的选项卡文本颜色

    我正在使用SlidingTabLayout类来在我的 Android 应用程序中显示选项卡 我正在使用我设置的自定义选项卡视图setCustomTabView功能 虽然我可以轻松自定义选定选项卡的文本颜色 但我找不到自定义未选定选项卡的文本
  • 如何取消 Postgres 中的错误命令(从终端)?

    我在尝试编写函数时写了一个错误的命令 我在函数中犯了一个错误 并且想在没有完成函数的情况下退出它 并且我想退出它 但是终端的命令提示符不允许我退出 我试过这个 https unix stackexchange com questions 4
  • 如何为我的杆和楔子添加纹理?

    我正在使用绘制几个条形图和饼图matplotlib pyplot bar http matplotlib org api pyplot api html matplotlib pyplot bar and matplotlib pyplot
  • PSD 到 html 转换 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • WSGI 中的 httplib CannotSendRequest 错误

    我使用了两个不同的 python oauth 库和 Django 来通过 twitter 进行身份验证 该设置是在带有 WSGI 的 apache 上进行的 当我重新启动服务器时 大约 10 分钟一切正常 然后 httplib 似乎锁定了
  • 如何创建 Keras 层来执行 4D 卷积 (Conv4D)?

    看起来tf nn convolution应该能够进行 4D 卷积 但我无法成功创建 Keras 层来使用此函数 我尝试过使用 KerasLambda层来包裹tf nn convolution功能 但也许其他人有更好的主意 我想利用数据的高维
  • 正确缩放 Javascript Canvas 游戏

    我正在尝试根据屏幕尺寸动态缩放画布游戏 我了解如何根据屏幕尺寸调整画布大小 但我也想调整内容大小 基本上我希望游戏在每台设备上看起来都一样 我目前遇到的问题是 当拥有 4k 屏幕的人玩游戏时 他们可以轻松看到整个地图 当有人的屏幕非常小时
  • 将字符写入 Java 套接字时 fsockopen 10053 错误

    Right 我正在尝试用 PHP 编写一个小脚本 将游戏中的聊天包发送到 Minecraft Deliberately low timeout mc fsockopen localhost 25565 errno err 3 现在 如果连接
  • 无限递归,同时扩展管理员的应用程序change_form模板

    我有以下模板template admin change form html extends admin change form html block extrahead include dojango base html block doj
  • RVM + Ruby 1.9.2 + Rmagick + Lion = 系统工作,RVM 不工作

    我已通过 RVM 在全新安装的 OS X Lion 上安装了 Ruby 1 9 2 我已经通过 homebrew 安装了 Ghostscript 和 imagemagick 当使用 RVM 运行 gem install rmagick 时
  • 如何在具有隔离范围的指令上使用 ng-click?

    当范围在指令上继承时 我可以让 ng click 工作 但在隔离时则不行 UPDATE The point is that I want the click function to be defined as part of the dir
  • 查询 firebase 中包含长度 > 0 的数组的文档

    是否可以在 firebase 中查询集合中的文档 其中特定字段的数组中的元素数量大于 0 对于我的示例 每个文档都有一个名为 people 的字段 其中包含一个整数数组 或者该数组为空 我的搜索总是返回 0 个文档 但是当我在 firest
  • 替换文件中两个标记之间的内容

    使用 ruby 不是 Rails 我试图弄清楚如何用字符串替换 而不是追加 静态文件中的某个块 例如 在 static file html 中 我想替换 html 注释 start 和 end 之间的所有内容 p lorem ipsum b
  • 同时使用 SSL 加密和 NTLM 身份验证的 HttpClient 失败

    我尝试在使用 SSL 加密 https 以及 NTLM 身份验证的 Sharepoint 2010 服务器上执行简单的 REST 调用 当服务器设置为不需要 SSL 仅用于测试时 服务器在生产中将需要 SSL 时 我的 NTLM 身份验证和
  • 如何将图像文件添加到 json 对象中?

    我想将图像文件添加到 json 对象中 是否可以将图像文件添加到 json 对象中 我尝试了下面的代码 但它不起作用 因为我想将该 json 对象发送到服务器 然后服务器将读取我的图像文件并存储到该数据库中 JSONObject test
  • 没有公平性的DelayQueue有问题吗?

    在 Java 7 中 DelayQueue 的实现使用没有公平策略的 ReentrantLock 从长远来看 这是一个问题吗 线程会因此而饿死吗 Thanks 如果您考虑ScheduledThreadPoolExecutor 或任何其他生产
  • php paypal 服务器端 REST 集成失败

    我无法发布代码 错误等 因为 你需要至少 10 个声誉才能发布 2 个以上的链接 并且所有内容都包含很多链接 只是花了几个小时写了一篇完整详细的帖子 我在这里 和其他地方 读过类似的帖子 但它们没有帮助 我基本上遵循 https devel
  • SQL Server:将 varchar 转换为十进制(也考虑指数表示法)

    我需要转换表的数据并进行一些操作 其中一种列数据类型是Varchar 但它存储decimal数字 我正在努力转换varchar into decimal 我努力了CAST TempPercent1 AS DECIMAL 28 16 问题是数
  • C++ 在循环中创建线程时出错

    我在 Visual Studio 2015 中运行以下命令时遇到问题 include
  • Angular2更改检测“表达式在检查后已更改”

    我在 Angular2 最终版本 中遇到了有关组件之间的更改检测和数据流的问题 我已经解决了这个问题 但对我来说似乎有点老套 所以想知道是否有更好的方法 基本上我有一个组件 A 它有一个子组件 B 还有 ngFor 创建多个子组件 C 对于