diff --git a/src/ng/directive/form.js b/src/ng/directive/form.js index 6772d93243d9..9c33dd65cad6 100644 --- a/src/ng/directive/form.js +++ b/src/ng/directive/form.js @@ -496,15 +496,13 @@ var formDirectiveFactory = function(isNgForm) { parentFormCtrl.$$renameControl(controller, alias); }); } - if (parentFormCtrl !== nullFormCtrl) { - formElement.on('$destroy', function() { - parentFormCtrl.$removeControl(controller); - if (alias) { - setter(scope, alias, undefined, alias); - } - extend(controller, nullFormCtrl); //stop propagating child destruction handlers upwards - }); - } + formElement.on('$destroy', function() { + parentFormCtrl.$removeControl(controller); + if (alias) { + setter(scope, alias, undefined, alias); + } + extend(controller, nullFormCtrl); //stop propagating child destruction handlers upwards + }); } }; } diff --git a/test/ng/directive/formSpec.js b/test/ng/directive/formSpec.js index 4a82a01e6bb3..5a7ca478caaf 100644 --- a/test/ng/directive/formSpec.js +++ b/test/ng/directive/formSpec.js @@ -58,6 +58,26 @@ describe('form', function() { expect(form.alias).toBeUndefined(); }); + it('should remove scope reference when form with no parent form is removed from the DOM', function() { + var formController; + scope.ctrl = {}; + doc = $compile( + '
' + + '' + + '
')(scope); + + scope.$digest(); + expect(scope.ctrl.myForm).toBeUndefined(); + + scope.$apply('formPresent = true'); + expect(scope.ctrl.myForm).toBeDefined(); + + formController = doc.find('form').controller('form'); + expect(scope.ctrl.myForm).toBe(formController); + + scope.$apply('formPresent = false'); + expect(scope.ctrl.myForm).toBeUndefined(); + }); it('should use ngForm value as form name', function() { doc = $compile(