15

我有谷歌地图,每秒触发 100 多次变化检测。如何为此禁用更改检测。

点击此处查看地图预览

使用 mouseover 事件时会更糟。

ngDoCheck() {
  console.log('do check', this.i++);
}
4

2 回答 2

30

我有同样的问题,尝试在你的组件构造函数中注入 NgZone 类

constructor(private zone: NgZone) {

)

然后,使用 NgZone 中的 runOutsideAngular 方法将谷歌图表中的 draw 方法放入回调中,执行类似的操作。

this.zone.runOutsideAngular(() => {
    var chart = new google.visualization.PieChart(nativeElement);
    chart.draw(dataTable, options);
})

这使得执行的代码不会触发角度检测更改。将此应用于您制作的每个图表。我希望这会有所帮助。

多亏了这个

于 2016-09-21T20:51:40.873 回答
13

临时禁用更改检测ChangeDetectorRef的另一个选项

enabled = true;  
constructor(private ref: ChangeDetectorRef)

toggleChangeDetection() {
  if (this.enabled) 
  {
    this.enabled = false;
    this.ref.detach();
  }
  else {
    this.enabled = true;
    this.ref.reattach();
}
于 2017-01-30T13:46:32.647 回答