From 35ac2bb4bc1c795ab1ba6ac41b335b15e8b878c7 Mon Sep 17 00:00:00 2001 From: Paul Gschwendtner Date: Wed, 6 Jan 2016 14:17:17 +0100 Subject: [PATCH] fix(menu): cleanup interim element on element destroy + fixed typo + added test Fixes #6545 Closes #6558 --- src/components/menu/js/menuController.js | 3 +++ src/components/menu/js/menuServiceProvider.js | 2 +- src/components/menu/menu.spec.js | 11 +++++++++++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/components/menu/js/menuController.js b/src/components/menu/js/menuController.js index c0e8dd51337..78f269e2356 100644 --- a/src/components/menu/js/menuController.js +++ b/src/components/menu/js/menuController.js @@ -41,6 +41,9 @@ function MenuController($mdMenu, $attrs, $element, $scope, $mdUtil, $timeout, $r }); $scope.$on('$destroy', this.disableHoverListener); + menuContainer.on('$destroy', function() { + $mdMenu.destroy(); + }); }; var openMenuTimeout, menuItems, deregisterScopeListeners = []; diff --git a/src/components/menu/js/menuServiceProvider.js b/src/components/menu/js/menuServiceProvider.js index 1665a272bd6..0d4b19eaf52 100644 --- a/src/components/menu/js/menuServiceProvider.js +++ b/src/components/menu/js/menuServiceProvider.js @@ -69,7 +69,7 @@ function MenuProvider($$interimElementProvider) { } /** - * Removing the menu element from the DOM and remove all associated evetn listeners + * Removing the menu element from the DOM and remove all associated event listeners * and backdrop */ function onRemove(scope, element, opts) { diff --git a/src/components/menu/menu.spec.js b/src/components/menu/menu.spec.js index e9f7cb804fa..129579ba0e7 100644 --- a/src/components/menu/menu.spec.js +++ b/src/components/menu/menu.spec.js @@ -96,6 +96,17 @@ describe('material.components.menu', function() { expect(clickDetected).toBe(false); }); + it('should remove the backdrop if container got destroyed', inject(function($document) { + var menu = setup(); + openMenu(menu); + + expect($document.find('md-backdrop').length).not.toBe(0); + + menu.remove(); + + expect($document.find('md-backdrop').length).toBe(0); + })); + it('closes on backdrop click', inject(function($document) { var menu = setup();