如何为第三方库禁用angular2更改检测

如何为第三方库禁用angular2更改检测,angular,angular2-changedetection,Angular,Angular2 Changedetection,我有谷歌地图,它每秒触发100多次变化检测。如何为此禁用更改检测 如果使用鼠标悬停事件,情况会更糟 ngDoCheck() { console.log('do check', this.i++); } 我也有同样的问题,尝试在组件构造函数中注入NgZone类 constructor(private zone: NgZone) { ) 然后,使用NgZone中的runOutsideAngular方法放入一个回调,即GoogleCharts中的draw方法,执行如下操作 this.zon

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

如果使用鼠标悬停事件,情况会更糟

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

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

constructor(private zone: NgZone) {

)
然后,使用NgZone中的runOutsideAngular方法放入一个回调,即GoogleCharts中的draw方法,执行如下操作

this.zone.runOutsideAngular(() => {
    var chart = new google.visualization.PieChart(nativeElement);
    chart.draw(dataTable, options);
})
这使得执行的代码不会触发角度检测更改。 将此应用于您制作的每个图表。我希望这有帮助


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


我认为这与第三方指导无关。Angular2在每个事件后运行更改检测。您可以设置
ChangeDetectionStrategy.OnPush
进行手动更改检测。谢谢。在我的公司网站canvas动画中使用了此选项,必须了解,此选项仅检测“此”组件上的更改检测。所以所有其他组件都需要这样做。我认为,让一个“有问题”的组件不触发变更检测比禁用所有其他组件上的变更检测更容易。
enabled = true;  
constructor(private ref: ChangeDetectorRef)

toggleChangeDetection() {
  if (this.enabled) 
  {
    this.enabled = false;
    this.ref.detach();
  }
  else {
    this.enabled = true;
    this.ref.reattach();
}