这个网站说:
在默认的更改检测策略中,Angular将运行更改每当@Input((数据更改或修改时检测
但实际上,只有在以下三种情况下才会触发更改检测(正如同一网站之前所说(:
- 任何浏览器事件(点击、按键等(
- getInterval((和setTimeout((
- 通过XMLHttpRequest的HTTP请求
因此(与开头的语句不同(,当@Input
发生更改时(但仅在给定的三个条件下(,不会运行更改检测。在执行更改检测期间,必须检测@Input更改。我说得对吗?
此外,当输入只能在上述三个条件下变化时,为什么@Input
会触发变化检测,而对于这三个条件,我们已经在触发变化检测了。单独触发@Input
变化检测似乎是多余的
变更检测器和变更检测不是一回事。更改检测将在这三个条件下运行,这是正确的,但这只意味着如果需要重新发送,它将检查所有组件。
因此,如果Input((数据与上次执行更改检测时相比发生了更改,则该组件将被标记为脏组件,并将被重新渲染。但是,如果组件在上一个更改检测周期中没有任何更改(因此输入具有相同的值(,则不会重新渲染组件(更改检测器不会运行(