Angular中的更改检测是否也由@Input更改触发



这个网站说:

在默认的更改检测策略中,Angular将运行更改每当@Input((数据更改或修改时检测

但实际上,只有在以下三种情况下才会触发更改检测(正如同一网站之前所说(:

  • 任何浏览器事件(点击、按键等(
  • getInterval((和setTimeout((
  • 通过XMLHttpRequest的HTTP请求

因此(与开头的语句不同(,当@Input发生更改时(但仅在给定的三个条件下(,不会运行更改检测。在执行更改检测期间,必须检测@Input更改。我说得对吗?

此外,当输入只能在上述三个条件下变化时,为什么@Input会触发变化检测,而对于这三个条件,我们已经在触发变化检测了。单独触发@Input变化检测似乎是多余的

变更检测器和变更检测不是一回事。更改检测将在这三个条件下运行,这是正确的,但这只意味着如果需要重新发送,它将检查所有组件。

因此,如果Input((数据与上次执行更改检测时相比发生了更改,则该组件将被标记为脏组件,并将被重新渲染。但是,如果组件在上一个更改检测周期中没有任何更改(因此输入具有相同的值(,则不会重新渲染组件(更改检测器不会运行(

最新更新