了解 Angular 2 中的变化检测

2024-02-21

我在 Angular 2 文档中遇到过以下示例

@Component({
  selector: 'cmp',
  changeDetection: ChangeDetectionStrategy.OnPush,
  template: `Number of ticks: {{numberOfTicks}}`
})
class Cmp {
  numberOfTicks = 0;
  constructor(ref: ChangeDetectorRef) {
    setInterval(() => {
      this.numberOfTicks ++
     // the following is required, otherwise the view will not be updated
     this.ref.markForCheck();
    }, 1000);
  }
}

如上所述,当changeDetection为ChangeDetectionStrategy.OnPush时,视图仅在“this.ref.markForCheck();”时更新。被调用。

任何人都可以在这里解释一下 markForCheck() 方法的重要性吗?


With ChangeDetectionStrategy.OnPushAngular 运行更改检测,当处于@Input()已更新、接收到 Angular 侦听的 DOM 事件、或异步管道 (| async) 获得了一个新值。

例如,如果您从服务订阅可观察对象并更新组件的状态,则与此状态的绑定将不会更新,因为上面的列表未涵盖这一点。如果你打电话this.ref.markForCheck()你告诉 Angular 它应该运行更改检测,因为实际上存在需要更新的更改(这也是异步管道的作用)。

其他情况是如果您明确 (this.zone.runOutsideAngular())或由于某些其他原因,在 Angulars 区域之外运行的代码会修改组件的状态,这也不会被覆盖(即使代码是事件处理程序)。

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

了解 Angular 2 中的变化检测 的相关文章

随机推荐

  • 使用 Perforce 代替 Subversion 有什么好处?

    我的团队使用 SVN 已有几年了 我们现在可以选择切换到 Perforce 做出这样的转变会有什么好处 和陷阱 P4 keeps track of your working copy on the server This means tha
  • 为什么事件冒泡在分离的 DOM 元素中不起作用?

    我有一个父母 div 有一个孩子 div 在内存中 未附加到当前文档 我想触发一个CustomEvent关注孩子 但听父母的事件 这是我的代码 var parent document createElement div var child
  • 在 Sublime Text 中添加自定义菜单

    如何添加自定义菜单项崇高文本2 有任何想法吗 我看到有一个主 sublime 菜单文件但不知道如何编辑它 Thanks sublime menu 文件只是 JSON 您可以在您的用户目录中创建一个 Main sublime menu 它将与
  • IOS 上的 PWA 和离线存储

    我们希望开发一款 应用程序 能够为评估人员记录受损汽车的详细信息 这个想法是让少数评估员拥有公司的 iPad 然后 当汽车损坏并返回车场时 他们可以参观拍照 输入一些详细信息 然后将其上传到主系统中 有些车场可能位于没有互联网覆盖的区域 因
  • 使用抽象超类作为Spring数据存储库的参数

    我知道如何实现 spring 数据存储库 创建一个像这样的界面 public interface CountryRepository extends CrudRepository
  • .on() 和 .click() 哪个更快?

    如果我有一个带有删除记录链接的表 那么连接单击事件的最佳方法是什么 这些在幕后的评价是否相同 table on click delete function do stuff or table delete click function do
  • 在 Twig 中使用自定义函数

    在我的模板中 我想输出服务器时区 我的模板有类似的东西 getservertimezone 然后在services yml我拥有的那个捆绑包的配置 my twig extension class My WebsiteBundle Exten
  • Switch 语句如何工作

    switch 语句如何立即下降到内存中的正确位置 对于嵌套的 if 语句 它必须与每个语句进行比较 但对于 switch 语句 它会直接转到正确的情况 这是如何实施的 有很多不同的方法来编译switch语句转换成机器码 以下是一些 The
  • C# 中从字符串数组中删除重复字符串的有效方法

    我想知道一种有效的方法来从 C 中的字符串数组中删除重复项 例如 string a abc xyz abc def ghi asdf ghi xd abc 会变成 string a abc xyz def ghi asdf xd 删除重复条
  • 错误:存在未提交的事务

    我在 SSMS 中打开一个新窗口并运行以下命令 SET ANSI DEFAULTS ON GO CREATE PROCEDURE dbo zzz test2 a int AS SET NOCOUNT ON SET a 1 RETURN 0
  • 如何解决 SYNCSORT JCL 中的“WER046A SORT CAPACITY EXCEEDED”问题

    我正在尝试对数据集进行排序并写入新的数据集 每次执行作业时 它都会异常终止 ABEND U0016 消息形式 SYSOUT WER276B SYSDIAG 24646562 29667262 29667262 27500165 WER164
  • 当 DHT 中的节点死亡时,数据会发生什么?

    问题取自这里 https groups google com forum topic byu cs 460 computer networking hpESI0NapmY https groups google com forum topi
  • Cython 中的 extra_compile_args

    我想传递一些额外的选项Cython编译器通过使用extra compile args My setup py from distutils core import setup from Cython Build import cythoni
  • CoreSpotlight 索引

    您好 我正在尝试在我的应用程序中实现 CoreSpotlight 建立索引时 我是否需要每次都运行它 还是在第一次安装应用程序时运行一次就足够了 如果应用程序被删除 我需要再次索引吗 这是我正在使用的代码 void spotLightInd
  • 哪个编译成更快的代码:“n * 3”或“n+(n*2)”?

    哪个编译成更快的代码 and n 3 或 ans n n 2 假设 n 是 int 或 long 并且它运行在现代 Win32 Intel 机器上 如果涉及一些解除引用 这会有所不同吗 也就是说 哪一个会更快 long a long pn
  • 如何使零件在 PartStack 中可移动

    我正在尝试弄清楚如何使零件在 e4 中的零件堆栈中可移动 有任何想法吗 为了支持拖放部件 您需要在 Application e4xmi 中指定 DndAddon 和 CleanupAddon 类 URI 是 bundleclass org
  • 授予 PostgreSQL 中特定数据库的权限

    我正从 MySQL 迁移到 PostgreSQL 但在用户权限方面遇到了困难 我习惯使用以下命令为用户分配数据库所有表的所有权限 MySQL grant all privileges on mydatabase to myuser loca
  • 违反实体框架代码优先链接表中的 PRIMARY KEY 约束

    我有一个用户表和一个角色表 有一个自动生成的 UsersRoles 链接表 其中包含 User 和 Roles 表中的 Id 这是使用以下代码生成的 modelBuilder Entity
  • 如何使 tkinter 按钮小部件占据网格的整个宽度

    我试过了this https stackoverflow com questions 24945467 python tkinter set entry grid width 100但这没有帮助 我正在制作一个计算器程序 到目前为止我已经做
  • 了解 Angular 2 中的变化检测

    我在 Angular 2 文档中遇到过以下示例 Component selector cmp changeDetection ChangeDetectionStrategy OnPush template Number of ticks n