@@ -306,7 +306,7 @@ function SelectDirective($mdSelect, $mdUtil, $mdTheming, $mdAria, $interpolate,
306
306
307
307
scope . $on ( '$destroy' , function ( ) {
308
308
if ( isOpen ) {
309
- $mdSelect . cancel ( ) . then ( function ( ) {
309
+ $mdSelect . hide ( ) . finally ( function ( ) {
310
310
selectContainer . remove ( ) ;
311
311
} ) ;
312
312
} else {
@@ -361,19 +361,18 @@ function SelectDirective($mdSelect, $mdUtil, $mdTheming, $mdAria, $interpolate,
361
361
}
362
362
363
363
function openSelect ( ) {
364
- scope . $evalAsync ( function ( ) {
365
- isOpen = true ;
366
- $mdSelect . show ( {
367
- scope : selectScope ,
368
- preserveScope : true ,
369
- skipCompile : true ,
370
- element : selectContainer ,
371
- target : element [ 0 ] ,
372
- hasBackdrop : true ,
373
- loadingAsync : attr . mdOnOpen ? scope . $eval ( attr . mdOnOpen ) || true : false
374
- } ) . then ( function ( selectedText ) {
375
- isOpen = false ;
376
- } ) ;
364
+ scope . $apply ( 'isOpen = true' ) ;
365
+
366
+ $mdSelect . show ( {
367
+ scope : selectScope ,
368
+ preserveScope : true ,
369
+ skipCompile : true ,
370
+ element : selectContainer ,
371
+ target : element [ 0 ] ,
372
+ hasBackdrop : true ,
373
+ loadingAsync : attr . mdOnOpen ? scope . $eval ( attr . mdOnOpen ) || true : false
374
+ } ) . then ( function ( ) {
375
+ isOpen = false ;
377
376
} ) ;
378
377
}
379
378
} ;
@@ -749,7 +748,7 @@ function SelectProvider($$interimElementProvider) {
749
748
} ) ;
750
749
751
750
/* @ngInject */
752
- function selectDefaultOptions ( $mdSelect , $mdConstant , $$rAF , $mdUtil , $mdTheming , $window ) {
751
+ function selectDefaultOptions ( $mdSelect , $mdConstant , $$rAF , $mdUtil , $mdTheming , $window , $q , $log ) {
753
752
var animator = $mdUtil . dom . animator ;
754
753
755
754
return {
@@ -832,11 +831,10 @@ function SelectProvider($$interimElementProvider) {
832
831
} ) ;
833
832
} ) ;
834
833
835
- return animator
836
- . waitTransitionEnd ( opts . selectEl , { timeout : 370 } )
837
- . then ( function ( res ) {
834
+ return opts . isRemoved ? $q . reject ( true ) : animator
835
+ . waitTransitionEnd ( opts . selectEl , { timeout : 470 } )
836
+ . finally ( function ( ) {
838
837
activateInteraction ( ) ;
839
- return res ;
840
838
} ) ;
841
839
842
840
function configureAria ( ) {
@@ -849,10 +847,12 @@ function SelectProvider($$interimElementProvider) {
849
847
element . addClass ( 'md-clickable' ) ;
850
848
851
849
opts . backdrop && opts . backdrop . on ( 'click' , function ( e ) {
850
+ $log . debug ( "backdrop click" ) ;
851
+
852
852
e . preventDefault ( ) ;
853
853
e . stopPropagation ( ) ;
854
854
opts . restoreFocus = false ;
855
- scope . $apply ( $mdSelect . cancel ) ;
855
+ $mdUtil . nextTick ( $mdSelect . hide , true ) ;
856
856
} ) ;
857
857
858
858
// Escape to close
@@ -873,7 +873,7 @@ function SelectProvider($$interimElementProvider) {
873
873
case $mdConstant . KEY_CODE . ESCAPE :
874
874
ev . preventDefault ( ) ;
875
875
opts . restoreFocus = true ;
876
- scope . $apply ( $mdSelect . cancel ) ;
876
+ $mdUtil . nextTick ( $mdSelect . hide , true ) ;
877
877
}
878
878
} ) ;
879
879
@@ -932,46 +932,53 @@ function SelectProvider($$interimElementProvider) {
932
932
function checkCloseMenu ( ) {
933
933
if ( ! selectCtrl . isMultiple ) {
934
934
opts . restoreFocus = true ;
935
- scope . $evalAsync ( function ( ) {
935
+
936
+ $mdUtil . nextTick ( function ( ) {
936
937
$mdSelect . hide ( selectCtrl . ngModel . $viewValue ) ;
937
- } ) ;
938
+ } , true ) ;
938
939
}
939
940
}
940
941
}
941
942
942
943
}
943
944
944
945
function onRemove ( scope , element , opts ) {
945
- element
946
- . addClass ( 'md-leave' )
947
- . removeClass ( 'md-clickable' ) ;
946
+ opts . isRemoved = true ;
948
947
949
948
opts . target . attr ( 'aria-expanded' , 'false' ) ;
950
949
opts . selectEl . off ( 'keydown' ) ;
951
- opts . isRemoved = true ;
952
950
953
951
angular . element ( $window ) . off ( 'resize' , opts . resizeFn ) ;
954
952
angular . element ( $window ) . off ( 'orientationchange' , opts . resizefn ) ;
955
953
opts . resizeFn = undefined ;
956
954
955
+ element
956
+ . addClass ( 'md-leave' )
957
+ . removeClass ( 'md-clickable' ) ;
958
+
957
959
var mdSelect = opts . selectEl . controller ( 'mdSelect' ) ;
958
960
if ( mdSelect ) {
959
- mdSelect . setLabelText ( opts . selectEl . controller ( 'mdSelectMenu' ) . selectedLabels ( ) ) ;
961
+ mdSelect . setLabelText ( opts . selectEl
962
+ . controller ( 'mdSelectMenu' )
963
+ . selectedLabels ( )
964
+ ) ;
960
965
}
961
966
967
+ opts . backdrop && opts . backdrop . remove ( ) ;
968
+
962
969
return animator
963
970
. waitTransitionEnd ( element , { timeout : 370 } )
964
971
. finally ( function ( ) {
972
+ mdSelect && mdSelect . triggerClose ( ) ;
973
+
965
974
element . removeClass ( 'md-active' ) ;
966
- opts . backdrop && opts . backdrop . remove ( ) ;
967
975
if ( element [ 0 ] . parentNode === opts . parent [ 0 ] ) {
968
976
opts . parent [ 0 ] . removeChild ( element [ 0 ] ) ; // use browser to avoid $destroy event
969
977
}
970
978
if ( opts . disableParentScroll ) {
971
979
opts . restoreScroll ( ) ;
972
980
}
973
981
if ( opts . restoreFocus ) opts . target . focus ( ) ;
974
- mdSelect && mdSelect . triggerClose ( ) ;
975
982
} ) ;
976
983
}
977
984
0 commit comments