Angular(点击)事件触发宿主组件重新渲染
Angular (click) events triggers host component re-rendering
在尝试减少应用程序中无用的组件呈现时,我注意到 Angular 会在点击事件上触发 changeDetection,即使对于具有 ChangeDetectionStrategy.OnPush[=12 的组件也是如此=]
我做了一个最小的例子来重现这个问题:stackblitz
有没有办法限制仅在输入更改或异步管道更新时呈现?
如果您在模板中调用函数,每次触发更改检测时都会调用它。
这被认为是非常糟糕的做法,您应该不惜一切代价避免它。
(快速 google 关于这个主题,有很多资源对此进行了更详细的解释)
检查组件何时重新呈现的正确方法应该使用生命周期挂钩,例如 ngOnChanges。
ChangeDetectionStrategy.OnPush
不会阻止触发 CD 循环,它只会影响组件是否在 CD 循环期间实际检查。
如果要防止点击事件触发CD,可以配置zone.js
。看看你的 polyfills.ts
文件,有一条注释解释了如何做。不过我自己没有这方面的经验,我也不确定这是否是你想要实现的,因为它适用于整个应用程序。
在尝试减少应用程序中无用的组件呈现时,我注意到 Angular 会在点击事件上触发 changeDetection,即使对于具有 ChangeDetectionStrategy.OnPush[=12 的组件也是如此=]
我做了一个最小的例子来重现这个问题:stackblitz
有没有办法限制仅在输入更改或异步管道更新时呈现?
如果您在模板中调用函数,每次触发更改检测时都会调用它。 这被认为是非常糟糕的做法,您应该不惜一切代价避免它。 (快速 google 关于这个主题,有很多资源对此进行了更详细的解释)
检查组件何时重新呈现的正确方法应该使用生命周期挂钩,例如 ngOnChanges。
ChangeDetectionStrategy.OnPush
不会阻止触发 CD 循环,它只会影响组件是否在 CD 循环期间实际检查。
如果要防止点击事件触发CD,可以配置zone.js
。看看你的 polyfills.ts
文件,有一条注释解释了如何做。不过我自己没有这方面的经验,我也不确定这是否是你想要实现的,因为它适用于整个应用程序。