HttpClient 中的角度变化检测

2024-04-10

我有一个HttpClient正在更新后端数据的服务。在后端处理期间,我通过执行以下操作来显示加载状态this.isLoading = true,成功处理后,我将删除该加载状态subscribe()通过使用this.isLoading = false;.

现在我改变了我的代码来使用ChangeDetectionStrategy.OnPush并且加载状态不再消失。我知道变化检测ChangeDetectionStrategy.OnPush当发生input属性更改或在组件等事件期间更改对象引用时。

就我而言,我是否必须手动调用ChangeDetectorRef.detectChanges()触发更改检测还是我错过了什么?

Edit

只是为了澄清,我正在使用this.isLoading通过相应地添加/删除 HTML 元素上的类来显示/隐藏加载状态。例如,

<div [class.processing]="isLoading"></div>


将 ChangeDetectionStrategy 设置为 OnPush 时,仅当输入发生更改时才会运行更改检测。由于您正在订阅可观察对象并更改局部变量,因此 Angular 将不会收到此更改的通知,因此您必须自己通知它。 推荐的方法是使用 ChangeDetectorRef.markForCheck() ,它将在组件上方的树枝上执行更改检测

这里有更多关于这方面的信息很棒的思想文章 https://blog.thoughtram.io/angular/2016/02/22/angular-2-change-detection-explained.html#observables

以及一个优秀的帕斯卡·普雷希特 (Pascal Precht) 的演讲 https://pascalprecht.github.io/slides/angular-2-change-detection-explained

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

HttpClient 中的角度变化检测 的相关文章

随机推荐

  • MySql - 大小 VARCHAR

    很多人对我说设置 VARCHAR 100 没有意义 它与 put 255 相同 我想知道为什么 那是垃圾 他们可能正在谈论这样一个事实 varchar无论最大长度是 100 还是 255 超过该长度的长度将使用两个字节 最多 64K 都使用
  • 关于 NSRunLoop,需要澄清

    When i Logger logger Logger new NSURL url NSURL URLWithString http www google com NSURLRequest request NSURLRequest requ
  • 如何使用 Linq To XML 获取元素值

    使用 Linq To XML 如何从下面的 xml 中获取 space id 值 720 我在读this http msdn microsoft com en us library bb308960 aspx但我认为xml中的命名空间是我的
  • 让 GitLab CI 克隆私有存储库

    我设置了 GitLab 和 GitLab CI 来托管和测试我的一些私人存储库 对于此系统下的作曲家模块 我设置了 Satis 来解析我的私有包 显然这些私有包需要 ssh 密钥来克隆它们 并且我在终端中可以使用它 我可以运行compose
  • ADO.Net (Azure AD) 错误“不支持关键字:身份验证”

    我正在尝试通过 C 代码使用 Azure AD 凭据连接到 Azure 数据库 代码如下 它在我的系统上运行良好 但是当我将它部署到32位VM时 它显示错误 不支持关键字 身份验证 VM 安装了 Net Framework 4 5 但未安装
  • 仅 Detox 测试启动画面

    我正在我的 React Native 项目上运行 detox 并且只能测试启动屏幕 启动屏幕进入登录屏幕 但排毒代码不允许我测试此元素 测试代码 describe Splash gt beforeEach async gt await de
  • java - 如何检查我的对象是否属于给定类的类型?

    我的方法获取 Class 作为参数 我必须检查我的变量是否属于 class 类型 Volvo v1 new Volvo Class aClass v1 getClass check aClass 在里面我需要做类似的事情 v2 instan
  • 输出到另一个窗口

    有没有办法直接在 VB NET 中打开窗体并在第二个监视器中最大化 也就是说 如果显示两个监视器 默认情况下第二个窗口中的表单加载会最大化吗 假设一个程序是用两种形式编写的 并且一台计算机连接了两个显示器 我希望 FormA 默认显示在 M
  • PyCharm:无法使用 docker-compose 创建远程 python 解释器

    尝试在 PyCharm 中创建 docker compose python 解释器时出现错误 解析 Users belek Projects project docker compose yml 时出错 进程docker compose c
  • 按一列中的因素拆分/子集数据框[重复]

    这个问题在这里已经有答案了 我的数据是这样的 例如 ID Rate State 1 24 AL 2 35 MN 3 46 FL 4 34 AL 5 78 MN 6 99 FL Data structure list ID 1 6 Rate
  • 致命错误:AST 文件格式错误或损坏 - Xcode

    在最新版本的 Xcode 中构建我的应用程序时出现此错误 致命错误 AST 文件格式错误或损坏 无法加载模块 Users me Library Developer Xcode DerivedData ModuleCache XYZYIE6Z
  • CMake FindThreads.cmake 找不到我的 pthreads.h 标头

    我在用着android cmake http code google com p android cmake 编译 Android 应用程序 这实质上创建了一个 CMake 工具链文件 用于使用 Android NDK 提供的工具链 As
  • Markdown 中的 RTL

    是否有任何现有的 Markdown 插件规范包含对 RTL 语言的支持 我希望是这样的 This paragraph is left to right lt This paragraph is right to left 或者其他什么 我可
  • Jquery Sortable,通过拖出删除当前Item

    我的问题 sortable 事件 out 当我在列表中拖动某些内容或对列表进行排序时触发 但我只想在拖出项目时启动该功能 My code document ready function ust div1 sortable out funct
  • 正则表达式最多匹配 4 个空格

    我有一个正则表达式来匹配一个人的名字 到目前为止 我有 a zA Z s 但我想添加一个检查以允许最多 4 个空格 我该如何修改它才能做到这一点 Edit 我的意思是字符串中任意位置有 4 个空格 不要尝试使用正则表达式验证名称 人们可以随
  • 如何使用 Bincode 在 Rust 中序列化 Enum,同时保留 Enum 判别式而不是索引?

    我一直在使用 bincode 在 Rust 中序列化枚举 但我面临一个问题 我收到枚举变体的索引而不是其指定的判别式 这是我尝试序列化的枚举的示例 derive Debug PartialEq Eq Serialize Deserializ
  • 在错误位置寻找模块的代码

    我使用 build dojotoolkit org 我的第一次尝试 创建了一个包含 3 层的多层构建 dojo js dojox js dijit js 每个 js 文件都上传到自己的文件夹中 dojo dojox dijit 当我运行代码
  • pip - 即使安装成功后也没有名为“pip”的模块

    我正在尝试在 Windows 10 系统上安装 pip 我得到了 get pip py 文件并运行了命令 python get pip py 这是终端的快照 python get pip py Collecting pip Using ca
  • 限制视图中的字符/单词 - Ruby on Rails

    我正在使用 Ruby on Rails 构建的一个非常简单的博客应用程序的主页上显示最近的评论 我想限制评论表的 正文 列中显示的字符数 我假设我可以在 的代码末尾添加一些内容 但我还不知道那会是什么 因为我对 Ruby 和 Rails 都
  • HttpClient 中的角度变化检测

    我有一个HttpClient正在更新后端数据的服务 在后端处理期间 我通过执行以下操作来显示加载状态this isLoading true 成功处理后 我将删除该加载状态subscribe 通过使用this isLoading false