Skip to content

Commit 4ddca09

Browse files
committed
add event listeners inside runOutsideAngular
1 parent 3b2bd6b commit 4ddca09

File tree

2 files changed

+22
-12
lines changed

2 files changed

+22
-12
lines changed

src/components/split.component.ts

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { Component, ChangeDetectorRef, Input, Output, HostBinding, ChangeDetectionStrategy,
2-
EventEmitter, Renderer2, OnDestroy, ElementRef, AfterViewInit } from '@angular/core';
2+
EventEmitter, Renderer2, OnDestroy, ElementRef, AfterViewInit, NgZone } from '@angular/core';
33
import { Subject } from 'rxjs/Subject';
44
import { Observable } from 'rxjs/Observable';
55
import 'rxjs/add/operator/debounceTime';
@@ -269,7 +269,8 @@ export class SplitComponent implements AfterViewInit, OnDestroy {
269269
sizePercentB: 0,
270270
};
271271

272-
constructor(private elRef: ElementRef,
272+
constructor(private ngZone: NgZone,
273+
private elRef: ElementRef,
273274
private cdRef: ChangeDetectorRef,
274275
private renderer: Renderer2) {}
275276

@@ -453,9 +454,11 @@ export class SplitComponent implements AfterViewInit, OnDestroy {
453454
// Place code here to allow '(gutterClick)' event even if '[disabled]="true"'.
454455
this.currentGutterNum = gutterNum;
455456
this.draggingWithoutMove = true;
456-
this.dragListeners.push( this.renderer.listen('document', 'mouseup', (e: MouseEvent) => this.stopDragging()) );
457-
this.dragListeners.push( this.renderer.listen('document', 'touchend', (e: TouchEvent) => this.stopDragging()) );
458-
this.dragListeners.push( this.renderer.listen('document', 'touchcancel', (e: TouchEvent) => this.stopDragging()) );
457+
this.ngZone.runOutsideAngular(() => {
458+
this.dragListeners.push( this.renderer.listen('document', 'mouseup', (e: MouseEvent) => this.stopDragging()) );
459+
this.dragListeners.push( this.renderer.listen('document', 'touchend', (e: TouchEvent) => this.stopDragging()) );
460+
this.dragListeners.push( this.renderer.listen('document', 'touchcancel', (e: TouchEvent) => this.stopDragging()) );
461+
});
459462

460463
if(this.disabled) {
461464
return;
@@ -492,8 +495,10 @@ export class SplitComponent implements AfterViewInit, OnDestroy {
492495
return;
493496
}
494497

495-
this.dragListeners.push( this.renderer.listen('document', 'mousemove', (e: MouseEvent) => this.dragEvent(e, start, areaA, areaB)) );
496-
this.dragListeners.push( this.renderer.listen('document', 'touchmove', (e: TouchEvent) => this.dragEvent(e, start, areaA, areaB)) );
498+
this.ngZone.runOutsideAngular(() => {
499+
this.dragListeners.push( this.renderer.listen('document', 'mousemove', (e: MouseEvent) => this.dragEvent(e, start, areaA, areaB)) );
500+
this.dragListeners.push( this.renderer.listen('document', 'touchmove', (e: TouchEvent) => this.dragEvent(e, start, areaA, areaB)) );
501+
});
497502

498503
areaA.comp.lockEvents();
499504
areaB.comp.lockEvents();

src/components/splitArea.directive.ts

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Directive, Input, ElementRef, Renderer2, OnInit, OnDestroy } from '@angular/core';
1+
import { Directive, Input, ElementRef, Renderer2, OnInit, OnDestroy, NgZone } from '@angular/core';
22

33
import { SplitComponent } from './split.component';
44

@@ -75,7 +75,8 @@ export class SplitAreaDirective implements OnInit, OnDestroy {
7575
private transitionListener: Function;
7676
private readonly lockListeners: Array<Function> = [];
7777

78-
constructor(private elRef: ElementRef,
78+
constructor(private ngZone: NgZone,
79+
private elRef: ElementRef,
7980
private renderer: Renderer2,
8081
private split: SplitComponent) {}
8182

@@ -85,7 +86,9 @@ export class SplitAreaDirective implements OnInit, OnDestroy {
8586
this.renderer.setStyle(this.elRef.nativeElement, 'flex-grow', '0');
8687
this.renderer.setStyle(this.elRef.nativeElement, 'flex-shrink', '0');
8788

88-
this.transitionListener = this.renderer.listen(this.elRef.nativeElement, 'transitionend', (e: TransitionEvent) => this.onTransitionEnd(e));
89+
this.ngZone.runOutsideAngular(() => {
90+
this.transitionListener = this.renderer.listen(this.elRef.nativeElement, 'transitionend', (e: TransitionEvent) => this.onTransitionEnd(e));
91+
});
8992
}
9093

9194
public getSizePixel(prop: 'offsetWidth' | 'offsetHeight'): number {
@@ -152,8 +155,10 @@ export class SplitAreaDirective implements OnInit, OnDestroy {
152155
}
153156

154157
public lockEvents(): void {
155-
this.lockListeners.push( this.renderer.listen(this.elRef.nativeElement, 'selectstart', (e: Event) => false) );
156-
this.lockListeners.push( this.renderer.listen(this.elRef.nativeElement, 'dragstart', (e: Event) => false) );
158+
this.ngZone.runOutsideAngular(() => {
159+
this.lockListeners.push( this.renderer.listen(this.elRef.nativeElement, 'selectstart', (e: Event) => false) );
160+
this.lockListeners.push( this.renderer.listen(this.elRef.nativeElement, 'dragstart', (e: Event) => false) );
161+
});
157162
}
158163

159164
public unlockEvents(): void {

0 commit comments

Comments
 (0)