7
7
Output ,
8
8
EventEmitter ,
9
9
Input ,
10
- OnDestroy
10
+ OnDestroy ,
11
+ NgZone
11
12
} from '@angular/core' ;
12
13
import { Subject } from 'rxjs/Subject' ;
13
14
import { Observable } from 'rxjs/Observable' ;
@@ -72,15 +73,23 @@ export class Draggable implements OnInit, OnDestroy {
72
73
/**
73
74
* @hidden
74
75
*/
75
- constructor ( public element : ElementRef , private renderer : Renderer , private draggableHelper : DraggableHelper ) { }
76
+ constructor (
77
+ public element : ElementRef ,
78
+ private renderer : Renderer ,
79
+ private draggableHelper : DraggableHelper ,
80
+ private zone : NgZone
81
+ ) { }
76
82
77
83
ngOnInit ( ) : void {
78
84
79
85
const mouseDrag : Observable < any > = this . mouseDown
80
86
. filter ( ( ) => this . canDrag ( ) )
81
87
. flatMap ( ( mouseDownEvent : MouseEvent ) => {
82
88
83
- this . dragStart . next ( { x : 0 , y : 0 } ) ;
89
+ this . zone . run ( ( ) => {
90
+ this . dragStart . next ( { x : 0 , y : 0 } ) ;
91
+ } ) ;
92
+
84
93
this . setCursor ( MOVE_CURSOR ) ;
85
94
86
95
const currentDrag : Subject < any > = new Subject ( ) ;
@@ -129,7 +138,9 @@ export class Draggable implements OnInit, OnDestroy {
129
138
. takeUntil ( Observable . merge ( this . mouseUp , this . mouseDown ) ) ;
130
139
131
140
mouseMove . takeLast ( 1 ) . subscribe ( ( { x, y} ) => {
132
- this . dragEnd . next ( { x, y} ) ;
141
+ this . zone . run ( ( ) => {
142
+ this . dragEnd . next ( { x, y} ) ;
143
+ } ) ;
133
144
currentDrag . complete ( ) ;
134
145
this . setCssTransform ( null ) ;
135
146
if ( this . ghostDragEnabled ) {
@@ -155,7 +166,9 @@ export class Draggable implements OnInit, OnDestroy {
155
166
} )
156
167
. map ( ( [ previous , next ] ) => next )
157
168
. subscribe ( ( { x, y, currentDrag, clientX, clientY} ) => {
158
- this . dragging . next ( { x, y} ) ;
169
+ this . zone . run ( ( ) => {
170
+ this . dragging . next ( { x, y} ) ;
171
+ } ) ;
159
172
if ( this . ghostDragEnabled ) {
160
173
this . renderer . setElementStyle ( this . element . nativeElement , 'pointerEvents' , 'none' ) ;
161
174
}
@@ -183,42 +196,50 @@ export class Draggable implements OnInit, OnDestroy {
183
196
*/
184
197
@HostListener ( 'mousedown' , [ '$event' ] )
185
198
onMouseDown ( event : MouseEvent ) : void {
186
- if ( ! this . mouseMoveEventListenerUnsubscribe ) {
187
- this . mouseMoveEventListenerUnsubscribe = this . renderer . listenGlobal ( 'document' , 'mousemove' , ( event : MouseEvent ) => {
188
- this . mouseMove . next ( event ) ;
189
- } ) ;
190
- }
191
- this . mouseDown . next ( event ) ;
199
+ this . zone . runOutsideAngular ( ( ) => {
200
+ if ( ! this . mouseMoveEventListenerUnsubscribe ) {
201
+ this . mouseMoveEventListenerUnsubscribe = this . renderer . listenGlobal ( 'document' , 'mousemove' , ( event : MouseEvent ) => {
202
+ this . mouseMove . next ( event ) ;
203
+ } ) ;
204
+ }
205
+ this . mouseDown . next ( event ) ;
206
+ } ) ;
192
207
}
193
208
194
209
/**
195
210
* @hidden
196
211
*/
197
212
@HostListener ( 'document:mouseup' , [ '$event' ] )
198
213
onMouseUp ( event : MouseEvent ) : void {
199
- if ( this . mouseMoveEventListenerUnsubscribe ) {
200
- this . mouseMoveEventListenerUnsubscribe ( ) ;
201
- this . mouseMoveEventListenerUnsubscribe = null ;
202
- }
203
- this . mouseUp . next ( event ) ;
214
+ this . zone . runOutsideAngular ( ( ) => {
215
+ if ( this . mouseMoveEventListenerUnsubscribe ) {
216
+ this . mouseMoveEventListenerUnsubscribe ( ) ;
217
+ this . mouseMoveEventListenerUnsubscribe = null ;
218
+ }
219
+ this . mouseUp . next ( event ) ;
220
+ } ) ;
204
221
}
205
222
206
223
/**
207
224
* @hidden
208
225
*/
209
226
@HostListener ( 'mouseenter' )
210
227
onMouseEnter ( ) : void {
211
- if ( this . canDrag ( ) ) {
212
- this . setCursor ( MOVE_CURSOR ) ;
213
- }
228
+ this . zone . runOutsideAngular ( ( ) => {
229
+ if ( this . canDrag ( ) ) {
230
+ this . setCursor ( MOVE_CURSOR ) ;
231
+ }
232
+ } ) ;
214
233
}
215
234
216
235
/**
217
236
* @hidden
218
237
*/
219
238
@HostListener ( 'mouseleave' )
220
239
onMouseLeave ( ) : void {
221
- this . setCursor ( null ) ;
240
+ this . zone . runOutsideAngular ( ( ) => {
241
+ this . setCursor ( null ) ;
242
+ } ) ;
222
243
}
223
244
224
245
private setCssTransform ( value : string ) : void {
0 commit comments