Angular 2:ChangeDetection 和 mousemove 事件
Angular 2: ChangeDetection and mousemove event
我有一个 Angular 2 组件,其中有很多 children。
由于性能问题,我想检查 ChangeDetection
检查我的 child-components 的频率。所以我记录了我的 child-components 之一的 ngAfterViewChecked
-回调。
我意识到我的 parent-component 有一个 mousemove()
回调,所以每次我将鼠标移到 [=29] 上时我的 childrens ngAfterViewChecked
都会被调用=].但是我没有更新 mousemove()
-回调中的任何组件变量。为什么 ChangeDetection
运行 对应 children 那么我该如何停止呢?
希望您能理解问题所在(如果不理解请发表评论,以便我澄清问题)。
提供的站点 peeskillet 显示了如何从 ChangeDetection 中排除事件监听器:
import { Component, NgZone } from '@angular/core';
@Component(...)
export class AppComponent {
...
element: HTMLElement;
constructor(private zone: NgZone) {}
mouseDown(event) {
...
this.element = event.target;
this.zone.runOutsideAngular(() => {
window.document.addEventListener('mousemove', this.mouseMove.bind(this));
});
}
mouseMove(event) {
event.preventDefault();
this.element.setAttribute('x', event.clientX + this.clientX + 'px');
this.element.setAttribute('y', event.clientX + this.clientY + 'px');
}
}
有关更多信息,我真的可以推荐这个 article。非常感谢 peeskillet!
我有一个 Angular 2 组件,其中有很多 children。
由于性能问题,我想检查 ChangeDetection
检查我的 child-components 的频率。所以我记录了我的 child-components 之一的 ngAfterViewChecked
-回调。
我意识到我的 parent-component 有一个 mousemove()
回调,所以每次我将鼠标移到 [=29] 上时我的 childrens ngAfterViewChecked
都会被调用=].但是我没有更新 mousemove()
-回调中的任何组件变量。为什么 ChangeDetection
运行 对应 children 那么我该如何停止呢?
希望您能理解问题所在(如果不理解请发表评论,以便我澄清问题)。
提供的站点 peeskillet 显示了如何从 ChangeDetection 中排除事件监听器:
import { Component, NgZone } from '@angular/core';
@Component(...)
export class AppComponent {
...
element: HTMLElement;
constructor(private zone: NgZone) {}
mouseDown(event) {
...
this.element = event.target;
this.zone.runOutsideAngular(() => {
window.document.addEventListener('mousemove', this.mouseMove.bind(this));
});
}
mouseMove(event) {
event.preventDefault();
this.element.setAttribute('x', event.clientX + this.clientX + 'px');
this.element.setAttribute('y', event.clientX + this.clientY + 'px');
}
}
有关更多信息,我真的可以推荐这个 article。非常感谢 peeskillet!