2016-08-17 18 views
8

Tôi có bản đồ google kích hoạt phát hiện thay đổi trên 100 lần mỗi giây. làm thế nào để vô hiệu hóa phát hiện thay đổi cho việc này.cách tắt tính năng phát hiện thay đổi angular2 cho thư viện của bên thứ ba

Click here for map preview

thậm chí còn tệ hơn khi sử dụng sự kiện di chuột.

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

Tôi không nghĩ rằng đây có liên quan đến bên thứ 3 directived. Angular2 chạy phát hiện thay đổi sau mỗi sự kiện. Bạn đặt 'ChangeDetectionStrategy.OnPush' để thực hiện phát hiện thay đổi thủ công. –

Trả lời

16

tôi đã cùng một vấn đề, hãy thử tiêm lớp NgZone trên constructor thành phần của bạn

constructor(private zone: NgZone) { 

) 

sau đó, sử dụng phương pháp runOutsideAngular từ NgZone để đưa vào một callback phương pháp bốc thăm từ bảng xếp hạng google, làm một cái gì đó như thế này.

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

Điều này làm cho mã thực thi không kích hoạt thay đổi phát hiện góc. Áp dụng điều này cho từng biểu đồ bạn thực hiện. Tôi hy vọng thấy điều này hữu ích.

Thanks to this

+0

Cảm ơn. Sử dụng hình ảnh này trên trang web hoạt hình của công ty tôi https://github.com/aviabird/website/blob/master/src/app/shared/services/canvas-animate.service.ts – pkrawat1

6

Một tùy chọn khác để tạm thời vô hiệu hóa phát hiện sự thay đổi ChangeDetectorRef

enabled = true; 
constructor(private ref: ChangeDetectorRef) 

toggleChangeDetection() { 
    if (this.enabled) 
    { 
    this.enabled = false; 
    this.ref.detach(); 
    } 
    else { 
    this.enabled = true; 
    this.ref.reattach(); 
} 
Các vấn đề liên quan