|
1 |
| -angular.module('ui.bootstrap.modal', []) |
| 1 | +angular.module('ui.bootstrap.modal', ['ui.bootstrap.transition']) |
2 | 2 |
|
3 | 3 | /**
|
4 | 4 | * A helper, internal data structure that acts as a map but also allows getting / removing
|
@@ -101,8 +101,8 @@ angular.module('ui.bootstrap.modal', [])
|
101 | 101 | };
|
102 | 102 | }])
|
103 | 103 |
|
104 |
| - .factory('$modalStack', ['$document', '$compile', '$rootScope', '$$stackedMap', |
105 |
| - function ($document, $compile, $rootScope, $$stackedMap) { |
| 104 | + .factory('$modalStack', ['$transition', '$timeout', '$document', '$compile', '$rootScope', '$$stackedMap', |
| 105 | + function ($transition, $timeout, $document, $compile, $rootScope, $$stackedMap) { |
106 | 106 |
|
107 | 107 | var backdropjqLiteEl, backdropDomEl;
|
108 | 108 | var backdropScope = $rootScope.$new(true);
|
@@ -133,16 +133,34 @@ angular.module('ui.bootstrap.modal', [])
|
133 | 133 | openedWindows.remove(modalInstance);
|
134 | 134 |
|
135 | 135 | //remove window DOM element
|
136 |
| - modalWindow.modalDomEl.remove(); |
| 136 | + // Scope should be destroyed when element is removed |
| 137 | + removeAfterAnimating(modalWindow.modalDomEl, modalWindow.modalScope); |
137 | 138 |
|
138 | 139 | //remove backdrop if no longer needed
|
139 | 140 | if (backdropDomEl && backdropIndex() == -1) {
|
140 |
| - backdropDomEl.remove(); |
| 141 | + removeAfterAnimating(backdropDomEl, backdropScope); |
141 | 142 | backdropDomEl = undefined;
|
142 | 143 | }
|
| 144 | + } |
143 | 145 |
|
144 |
| - //destroy scope |
145 |
| - modalWindow.modalScope.$destroy(); |
| 146 | + function removeAfterAnimating(domEl, scope) { |
| 147 | + scope.$destroy(); |
| 148 | + domEl.removeClass('in'); |
| 149 | + |
| 150 | + var transitionEndEventName = $transition.transitionEndEventName; |
| 151 | + if (transitionEndEventName) { |
| 152 | + // transition out |
| 153 | + var timeout = $timeout(function () { |
| 154 | + domEl.remove(); |
| 155 | + }, 500); |
| 156 | + |
| 157 | + domEl.bind(transitionEndEventName, function () { |
| 158 | + $timeout.cancel(timeout); |
| 159 | + domEl.remove(); |
| 160 | + }); |
| 161 | + } else { |
| 162 | + domEl.remove(); |
| 163 | + } |
146 | 164 | }
|
147 | 165 |
|
148 | 166 | $document.bind('keydown', function (evt) {
|
|
0 commit comments