2016-08-17 62 views
8

我有谷歌地圖,每秒觸發100次以上的變化檢測。如何爲此禁用更改檢測。如何禁用第三方庫的angular2變化檢測

Click here for map preview

使用鼠標懸停事件時,它會更差。

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

我不認爲這是關係到第三方directived。 Angular2在每個事件之後運行變化檢測。您可以設置'ChangeDetectionStrategy.OnPush'來執行手動更改檢測。 –

回答

16

我有同樣的問題,請嘗試注入NgZone類上的組件構造

constructor(private zone: NgZone) { 

) 

然後,使用runOutsideAngular方法從NgZone放在一個回調從谷歌圖表的繪製方法,做像這樣的東西。

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

這使得執行代碼不會觸發角度檢測更改。 將其應用於您製作的每張圖表。我希望找到這個幫助。

Thanks to this

+0

謝謝。在我公司的網站上使用這個畫布動畫https://github.com/aviabird/website/blob/master/src/app/shared/services/canvas-animate.service.ts – pkrawat1

6

另一個選擇暫時禁用更改檢測ChangeDetectorRef

enabled = true; 
constructor(private ref: ChangeDetectorRef) 

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