【发布时间】:2021-10-02 22:55:58
【问题描述】:
我有一个带有 @Input() 的 Angular 自定义滚动指令,我在其中传递一个 HTML 元素作为参数以将滚动条移动到该特定的 HTML 元素。
使用这种方法,如果我多次传递相同的 HTML 元素,则输入检测仅在第一次发生更改后才检测到任何更改。
有什么方法可以强制 Angular 检测相同输入的变化?
@Input() set elementToScroll(element: HTMLElement) {
if (element != undefined) {
console.log(element); // Detecting first time only for same input
this._osInstance?.scroll(
{ el: element, block: { y: 'begin' } },
500
);
}
}
【问题讨论】:
-
角度变化检测仅在输入值被地址改变时起作用,它是预期的,对于相同的值,它可以不考虑。这是一个有效的用例吗?检测相同输入的变化?认为角度变化检测在树中从上到下进行,如果您一直要求对相同值进行变化检测,角度需要运行那些不必要的变化检测,从长远来看会导致性能问题。
-
您使用哪种变更检测策略?默认情况下,仅当值发生更改并且 angular 运行从根到其所有子级的更改时才重要,前提是组件中发生了某些更改。在 Push 上,仅当我们将新引用传递给数据绑定的 Input 属性时才有效。您应该检查this 链接,因为了解更改检测很重要。
标签: angular typescript angular-input