1
- import { ChangeDetectionStrategy , Component , ElementRef , EventEmitter , Input , NgZone , OnDestroy , Optional , Output , Renderer , ViewChild , ViewEncapsulation } from '@angular/core' ;
1
+ import { AfterViewInit , ChangeDetectionStrategy , Component , ElementRef , EventEmitter , Input , NgZone , OnDestroy , Optional , Output , Renderer , ViewChild , ViewEncapsulation } from '@angular/core' ;
2
2
3
3
import { App } from '../app/app' ;
4
4
import { Config } from '../../config/config' ;
@@ -17,6 +17,14 @@ import { ViewController } from '../../navigation/view-controller';
17
17
export { ScrollEvent } from '../../util/scroll-view' ;
18
18
19
19
20
+ export class EventEmitterProxy < T > extends EventEmitter < T > {
21
+ onSubscribe : Function ;
22
+ subscribe ( generatorOrNext ?: any , error ?: any , complete ?: any ) : any {
23
+ this . onSubscribe ( ) ;
24
+ return super . subscribe ( generatorOrNext , error , complete ) ;
25
+ }
26
+ }
27
+
20
28
/**
21
29
* @name Content
22
30
* @description
@@ -125,7 +133,7 @@ export { ScrollEvent } from '../../util/scroll-view';
125
133
changeDetection : ChangeDetectionStrategy . OnPush ,
126
134
encapsulation : ViewEncapsulation . None
127
135
} )
128
- export class Content extends Ion implements OnDestroy {
136
+ export class Content extends Ion implements OnDestroy , AfterViewInit {
129
137
/** @internal */
130
138
_cTop : number ;
131
139
/** @internal */
@@ -312,17 +320,17 @@ export class Content extends Ion implements OnDestroy {
312
320
/**
313
321
* @output {ScrollEvent} Emitted when the scrolling first starts.
314
322
*/
315
- @Output ( ) ionScrollStart : EventEmitter < ScrollEvent > = new EventEmitter < ScrollEvent > ( ) ;
323
+ @Output ( ) ionScrollStart : EventEmitterProxy < ScrollEvent > = new EventEmitterProxy < ScrollEvent > ( ) ;
316
324
317
325
/**
318
326
* @output {ScrollEvent} Emitted on every scroll event.
319
327
*/
320
- @Output ( ) ionScroll : EventEmitter < ScrollEvent > = new EventEmitter < ScrollEvent > ( ) ;
328
+ @Output ( ) ionScroll : EventEmitterProxy < ScrollEvent > = new EventEmitterProxy < ScrollEvent > ( ) ;
321
329
322
330
/**
323
331
* @output {ScrollEvent} Emitted when scrolling ends.
324
332
*/
325
- @Output ( ) ionScrollEnd : EventEmitter < ScrollEvent > = new EventEmitter < ScrollEvent > ( ) ;
333
+ @Output ( ) ionScrollEnd : EventEmitterProxy < ScrollEvent > = new EventEmitterProxy < ScrollEvent > ( ) ;
326
334
327
335
328
336
constructor (
@@ -339,6 +347,11 @@ export class Content extends Ion implements OnDestroy {
339
347
) {
340
348
super ( config , elementRef , renderer , 'content' ) ;
341
349
350
+ let enableScrollListener = this . enableScrollListener . bind ( this ) ;
351
+ this . ionScroll . onSubscribe = enableScrollListener ;
352
+ this . ionScrollStart . onSubscribe = enableScrollListener ;
353
+ this . ionScrollEnd . onSubscribe = enableScrollListener ;
354
+
342
355
this . statusbarPadding = config . getBoolean ( 'statusbarPadding' , false ) ;
343
356
this . _imgReqBfr = config . getNumber ( 'imgRequestBuffer' , 1400 ) ;
344
357
this . _imgRndBfr = config . getNumber ( 'imgRenderBuffer' , 400 ) ;
@@ -348,7 +361,8 @@ export class Content extends Ion implements OnDestroy {
348
361
// goal is to completely remove this when iOS
349
362
// fully supports scroll events
350
363
// listen to JS scroll events
351
- this . _scroll = new ScrollView ( _plt , _dom , config . getBoolean ( 'virtualScrollEventAssist' ) ) ;
364
+ const jsScroll = config . getBoolean ( 'virtualScrollEventAssist' ) ;
365
+ this . _scroll = new ScrollView ( _app , _plt , _dom , jsScroll ) ;
352
366
353
367
while ( navCtrl ) {
354
368
if ( isTabs ( < any > navCtrl ) ) {
@@ -383,7 +397,7 @@ export class Content extends Ion implements OnDestroy {
383
397
/**
384
398
* @hidden
385
399
*/
386
- enableScrollListener ( ) {
400
+ ngAfterViewInit ( ) {
387
401
assert ( this . getFixedElement ( ) , 'fixed element was not found' ) ;
388
402
assert ( this . getScrollElement ( ) , 'scroll element was not found' ) ;
389
403
@@ -398,9 +412,6 @@ export class Content extends Ion implements OnDestroy {
398
412
399
413
// subscribe to every scroll move
400
414
scroll . onScroll = ( ev ) => {
401
- // remind the app that it's currently scrolling
402
- this . _app . setScrolling ( ) ;
403
-
404
415
// emit to all of our other friends things be scrolling
405
416
this . ionScroll . emit ( ev ) ;
406
417
@@ -413,8 +424,13 @@ export class Content extends Ion implements OnDestroy {
413
424
414
425
this . imgsUpdate ( ) ;
415
426
} ;
427
+ }
416
428
417
- scroll . setEnabled ( ) ;
429
+ /**
430
+ * @hidden
431
+ */
432
+ enableScrollListener ( ) {
433
+ this . _scroll . eventsEnabled = true ;
418
434
}
419
435
420
436
/**
0 commit comments