@@ -18,7 +18,7 @@ import {
18
18
ScrollStrategy ,
19
19
ViewportRuler ,
20
20
} from '@angular/cdk/overlay' ;
21
- import { filter , first , startWith , takeUntil } from 'rxjs/operators' ;
21
+ import { filter , first , map , startWith , takeUntil } from 'rxjs/operators' ;
22
22
import {
23
23
AfterContentInit ,
24
24
Attribute ,
@@ -401,14 +401,41 @@ export class MatSelect extends _MatSelectMixinBase implements AfterContentInit,
401
401
return merge ( ...this . options . map ( option => option . onSelectionChange ) ) ;
402
402
}
403
403
404
- /** Event emitted when the select has been opened. */
405
- @Output ( ) onOpen : EventEmitter < void > = new EventEmitter < void > ( ) ;
404
+ /** Event emitted when the select has been opened. */
405
+ @Output ( ) openedChange : EventEmitter < boolean > = new EventEmitter < boolean > ( ) ;
406
+
407
+ /** Event emitted when the select has been opened. */
408
+ @Output ( 'opened' )
409
+ get _openedStream ( ) : Observable < void > {
410
+ return this . openedChange . pipe ( filter ( o => o ) , map ( ( ) => { } ) ) ;
411
+ }
406
412
407
413
/** Event emitted when the select has been closed. */
408
- @Output ( ) onClose : EventEmitter < void > = new EventEmitter < void > ( ) ;
414
+ @Output ( 'closed' )
415
+ get _closedStream ( ) : Observable < void > {
416
+ return this . openedChange . pipe ( filter ( o => ! o ) , map ( ( ) => { } ) ) ;
417
+ }
418
+
419
+ /**
420
+ * Event emitted when the select has been opened.
421
+ * @deprecated Use `openedChange` instead.
422
+ */
423
+ @Output ( ) onOpen : Observable < void > = this . _openedStream ;
409
424
410
- /** Event emitted when the selected value has been changed by the user. */
411
- @Output ( ) change : EventEmitter < MatSelectChange > = new EventEmitter < MatSelectChange > ( ) ;
425
+ /**
426
+ * Event emitted when the select has been closed.
427
+ * @deprecated Use `openedChange` instead.
428
+ */
429
+ @Output ( ) onClose : Observable < void > = this . _closedStream ;
430
+
431
+ /** Event emitted when the selected value has been changed by the user. */
432
+ @Output ( ) selectionChange : EventEmitter < MatSelectChange > = new EventEmitter < MatSelectChange > ( ) ;
433
+
434
+ /**
435
+ * Event emitted when the selected value has been changed by the user.
436
+ * @deprecated Use `selectionChange` instead.
437
+ */
438
+ @Output ( ) change : EventEmitter < MatSelectChange > = this . selectionChange ;
412
439
413
440
/**
414
441
* Event that emits whenever the raw value of the select changes. This is here primarily
@@ -637,9 +664,9 @@ export class MatSelect extends _MatSelectMixinBase implements AfterContentInit,
637
664
_onPanelDone ( ) : void {
638
665
if ( this . panelOpen ) {
639
666
this . _scrollTop = 0 ;
640
- this . onOpen . emit ( ) ;
667
+ this . openedChange . emit ( true ) ;
641
668
} else {
642
- this . onClose . emit ( ) ;
669
+ this . openedChange . emit ( false ) ;
643
670
this . _panelDoneAnimating = false ;
644
671
this . overlayDir . offsetX = 0 ;
645
672
this . _changeDetectorRef . markForCheck ( ) ;
@@ -859,7 +886,7 @@ export class MatSelect extends _MatSelectMixinBase implements AfterContentInit,
859
886
860
887
this . _value = valueToEmit ;
861
888
this . _onChange ( valueToEmit ) ;
862
- this . change . emit ( new MatSelectChange ( this , valueToEmit ) ) ;
889
+ this . selectionChange . emit ( new MatSelectChange ( this , valueToEmit ) ) ;
863
890
this . valueChange . emit ( valueToEmit ) ;
864
891
this . _changeDetectorRef . markForCheck ( ) ;
865
892
}
0 commit comments