1
- import { ChangeDetectionStrategy , Component , ElementRef , EventEmitter , Input , NgZone , Output , Renderer , ViewChild , ViewEncapsulation } from '@angular/core' ;
1
+ import { ChangeDetectionStrategy , Component , ContentChild , ElementRef , EventEmitter , Input , NgZone , Output , Renderer , ViewChild , ViewEncapsulation } from '@angular/core' ;
2
2
3
3
import { Backdrop } from '../backdrop/backdrop' ;
4
4
import { Config } from '../../config/config' ;
@@ -10,7 +10,7 @@ import { MenuType } from './menu-types';
10
10
import { Platform } from '../../platform/platform' ;
11
11
import { GestureController } from '../../gestures/gesture-controller' ;
12
12
import { UIEventManager } from '../../util/ui-event-manager' ;
13
-
13
+ import { Content } from '../content/content' ;
14
14
15
15
/**
16
16
* @name Menu
@@ -208,6 +208,11 @@ export class Menu {
208
208
*/
209
209
@ViewChild ( Backdrop ) backdrop : Backdrop ;
210
210
211
+ /**
212
+ * @private
213
+ */
214
+ @ContentChild ( Content ) menuContent : Content ;
215
+
211
216
/**
212
217
* @input {any} A reference to the content element the menu should use.
213
218
*/
@@ -303,48 +308,47 @@ export class Menu {
303
308
* @private
304
309
*/
305
310
ngOnInit ( ) {
306
- let self = this ;
307
- self . _init = true ;
311
+ this . _init = true ;
308
312
309
- let content = self . content ;
310
- self . _cntEle = ( content instanceof Node ) ? content : content && content . getNativeElement && content . getNativeElement ( ) ;
313
+ let content = this . content ;
314
+ this . _cntEle = ( content instanceof Node ) ? content : content && content . getNativeElement && content . getNativeElement ( ) ;
311
315
312
316
// requires content element
313
- if ( ! self . _cntEle ) {
317
+ if ( ! this . _cntEle ) {
314
318
return console . error ( 'Menu: must have a [content] element to listen for drag events on. Example:\n\n<ion-menu [content]="content"></ion-menu>\n\n<ion-nav #content></ion-nav>' ) ;
315
319
}
316
320
317
321
// normalize the "side"
318
- if ( self . side !== 'left' && self . side !== 'right' ) {
319
- self . side = 'left' ;
322
+ if ( this . side !== 'left' && this . side !== 'right' ) {
323
+ this . side = 'left' ;
320
324
}
321
- self . _renderer . setElementAttribute ( self . _elementRef . nativeElement , 'side' , self . side ) ;
325
+ this . setElementAttribute ( 'side' , this . side ) ;
322
326
323
327
// normalize the "type"
324
- if ( ! self . type ) {
325
- self . type = self . _config . get ( 'menuType' ) ;
328
+ if ( ! this . type ) {
329
+ this . type = this . _config . get ( 'menuType' ) ;
326
330
}
327
- self . _renderer . setElementAttribute ( self . _elementRef . nativeElement , 'type' , self . type ) ;
331
+ this . setElementAttribute ( 'type' , this . type ) ;
328
332
329
333
// add the gestures
330
- self . _cntGesture = new MenuContentGesture ( self , document . body ) ;
334
+ this . _cntGesture = new MenuContentGesture ( this , document . body ) ;
331
335
332
336
// register listeners if this menu is enabled
333
337
// check if more than one menu is on the same side
334
- let hasEnabledSameSideMenu = self . _menuCtrl . getMenus ( ) . some ( m => {
335
- return m . side === self . side && m . enabled ;
338
+ let hasEnabledSameSideMenu = this . _menuCtrl . getMenus ( ) . some ( m => {
339
+ return m . side === this . side && m . enabled ;
336
340
} ) ;
337
341
if ( hasEnabledSameSideMenu ) {
338
342
// auto-disable if another menu on the same side is already enabled
339
- self . _isEnabled = false ;
343
+ this . _isEnabled = false ;
340
344
}
341
- self . _setListeners ( ) ;
345
+ this . _setListeners ( ) ;
342
346
343
- self . _cntEle . classList . add ( 'menu-content' ) ;
344
- self . _cntEle . classList . add ( 'menu-content-' + self . type ) ;
347
+ this . _cntEle . classList . add ( 'menu-content' ) ;
348
+ this . _cntEle . classList . add ( 'menu-content-' + this . type ) ;
345
349
346
350
// register this menu with the app's menu controller
347
- self . _menuCtrl . register ( self ) ;
351
+ this . _menuCtrl . register ( this ) ;
348
352
}
349
353
350
354
/**
@@ -468,8 +472,9 @@ export class Menu {
468
472
private _before ( ) {
469
473
// this places the menu into the correct location before it animates in
470
474
// this css class doesn't actually kick off any animations
471
- this . getNativeElement ( ) . classList . add ( 'show-menu' ) ;
472
- this . getBackdropElement ( ) . classList . add ( 'show-backdrop' ) ;
475
+ this . menuContent && this . menuContent . resize ( ) ;
476
+ this . setElementClass ( 'show-menu' , true ) ;
477
+ this . backdrop . setElementClass ( 'show-backdrop' , true ) ;
473
478
this . _keyboard . close ( ) ;
474
479
this . _isAnimating = true ;
475
480
}
@@ -482,11 +487,10 @@ export class Menu {
482
487
this . isOpen = isOpen ;
483
488
this . _isAnimating = false ;
484
489
485
- ( < any > this . _cntEle . classList ) [ isOpen ? 'add' : 'remove' ] ( 'menu-content-open' ) ;
486
-
487
490
this . _events . unlistenAll ( ) ;
488
-
489
491
if ( isOpen ) {
492
+ this . _cntEle . classList . add ( 'menu-content-open' ) ;
493
+
490
494
let callback = this . onBackdropClick . bind ( this ) ;
491
495
this . _events . pointerEvents ( {
492
496
element : this . _cntEle ,
@@ -499,8 +503,10 @@ export class Menu {
499
503
this . ionOpen . emit ( true ) ;
500
504
501
505
} else {
502
- this . getNativeElement ( ) . classList . remove ( 'show-menu' ) ;
503
- this . getBackdropElement ( ) . classList . remove ( 'show-backdrop' ) ;
506
+ this . _cntEle . classList . remove ( 'menu-content-open' ) ;
507
+ this . setElementClass ( 'show-menu' , false ) ;
508
+ this . backdrop . setElementClass ( 'show-menu' , false ) ;
509
+
504
510
this . ionClose . emit ( true ) ;
505
511
}
506
512
}
@@ -597,6 +603,17 @@ export class Menu {
597
603
return this . _menuCtrl ;
598
604
}
599
605
606
+ /**
607
+ * @private
608
+ */
609
+ setElementClass ( className : string , add : boolean ) {
610
+ this . _renderer . setElementClass ( this . _elementRef . nativeElement , className , add ) ;
611
+ }
612
+
613
+ setElementAttribute ( attributeName : string , value : string ) {
614
+ this . _renderer . setElementAttribute ( this . _elementRef . nativeElement , attributeName , value ) ;
615
+ }
616
+
600
617
/**
601
618
* @private
602
619
*/
0 commit comments