diff --git a/src/ng/directive/select.js b/src/ng/directive/select.js index 55381ff72835..d00a8017f7c3 100644 --- a/src/ng/directive/select.js +++ b/src/ng/directive/select.js @@ -281,7 +281,7 @@ var SelectController = var removeValue = optionAttrs.value; self.removeOption(removeValue); - self.ngModelCtrl.$render(); + scheduleRender(); if (self.multiple && currentValue && currentValue.indexOf(removeValue) !== -1 || currentValue === removeValue diff --git a/test/ng/directive/selectSpec.js b/test/ng/directive/selectSpec.js index 6990cfeb9eb9..ad4472387347 100644 --- a/test/ng/directive/selectSpec.js +++ b/test/ng/directive/selectSpec.js @@ -2316,6 +2316,34 @@ describe('select', function() { }); + it('should keep the ngModel value when the selected option is recreated by ngRepeat', function() { + + scope.options = ['A', 'B', 'C']; + scope.obj = { + value: 'B' + }; + + compile( + '' + ); + + var optionElements = element.find('option'); + expect(optionElements.length).toEqual(3); + expect(optionElements[0].value).toBe('A'); + expect(optionElements[1]).toBeMarkedAsSelected(); + + scope.$apply(function() { + scope.options = ['B', 'C', 'D']; + }); + + optionElements = element.find('option'); + expect(optionElements.length).toEqual(3); + expect(optionElements[0].value).toBe('B'); + expect(optionElements[0]).toBeMarkedAsSelected(); + }); + });