From da5a656ddbd7ed669105609f39a9a140cc8ccd5e Mon Sep 17 00:00:00 2001 From: Alex Sukhodolsky Date: Thu, 25 Feb 2016 10:12:23 -0600 Subject: [PATCH] fix(autocomplete): clean up md-scroll-mask element on destroy * added test Fixes #7049 Fixes #7128 --- .../autocomplete/autocomplete.spec.js | 43 +++++++++++++++++++ .../autocomplete/js/autocompleteController.js | 4 ++ 2 files changed, 47 insertions(+) diff --git a/src/components/autocomplete/autocomplete.spec.js b/src/components/autocomplete/autocomplete.spec.js index 0d5634f2c6d..e42cb6e2578 100644 --- a/src/components/autocomplete/autocomplete.spec.js +++ b/src/components/autocomplete/autocomplete.spec.js @@ -365,6 +365,49 @@ describe('', function() { element.remove(); })); + it('should remove the md-scroll-mask on cleanup', inject(function($mdUtil, $timeout, $material) { + spyOn($mdUtil, 'enableScrolling'); + + var scope = createScope(); + var template = + '' + + ' {{item.display}}' + + ' Sorry, not found...' + + ''; + var element = compile(template, scope); + var ctrl = element.controller('mdAutocomplete'); + + $material.flushOutstandingAnimations(); + + // Focus our input + ctrl.focus(); + + // Set our search text to a value that we know doesn't exist + scope.searchText = 'somethingthatdoesnotexist'; + + // Run our initial flush + $timeout.flush(); + waitForVirtualRepeat(element); + + // Wait for the next tick when the values will be updated + $timeout.flush(); + + expect(ctrl.hidden).toBeFalsy(); + + // Make sure we wrap up anything and remove the element + $timeout.flush(); + element.remove(); + scope.$destroy(); + + // Should be hidden on once the scope is destroyed to ensure proper cleanup (like md-scroll-mask is removed from the DOM) + expect($mdUtil.enableScrolling).toHaveBeenCalled(); + })); + it('should ensure the parent scope digests along with the current scope', inject(function($timeout, $material) { var scope = createScope(null, {bang: 'boom'}); var template = diff --git a/src/components/autocomplete/js/autocompleteController.js b/src/components/autocomplete/js/autocompleteController.js index 0efaa9d03af..7b86aed5701 100644 --- a/src/components/autocomplete/js/autocompleteController.js +++ b/src/components/autocomplete/js/autocompleteController.js @@ -176,6 +176,10 @@ function MdAutocompleteCtrl ($scope, $element, $mdUtil, $mdConstant, $mdTheming, * Removes any events or leftover elements created by this controller */ function cleanup () { + if(!ctrl.hidden) { + $mdUtil.enableScrolling(); + } + angular.element($window).off('resize', positionDropdown); if ( elements ){ var items = 'ul scroller scrollContainer input'.split(' ');