diff --git a/src/ng/directive/select.js b/src/ng/directive/select.js index 071a90ab1022..b2e889532f92 100644 --- a/src/ng/directive/select.js +++ b/src/ng/directive/select.js @@ -205,7 +205,8 @@ var selectDirective = ['$compile', '$parse', function($compile, $parse) { optionsMap = {}, ngModelCtrl = nullModelCtrl, nullOption, - unknownOption; + unknownOption, + optionsExp = $attrs.ngOptions; self.databound = $attrs.ngModel; @@ -222,7 +223,7 @@ var selectDirective = ['$compile', '$parse', function($compile, $parse) { assertNotHasOwnProperty(value, '"option value"'); optionsMap[value] = true; - if (ngModelCtrl.$viewValue == value) { + if (isUndefined(optionsExp) && ngModelCtrl.$viewValue == value) { $element.val(value); if (unknownOption.parent()) unknownOption.remove(); } @@ -238,7 +239,7 @@ var selectDirective = ['$compile', '$parse', function($compile, $parse) { self.removeOption = function(value) { if (this.hasOption(value)) { delete optionsMap[value]; - if (ngModelCtrl.$viewValue === value) { + if (isUndefined(optionsExp) && ngModelCtrl.$viewValue === value) { this.renderUnknownOption(value); } } diff --git a/test/ng/directive/selectSpec.js b/test/ng/directive/selectSpec.js index 2a624130fc69..62a5a561e39c 100644 --- a/test/ng/directive/selectSpec.js +++ b/test/ng/directive/selectSpec.js @@ -1887,9 +1887,30 @@ describe('select', function() { expect(option.val()).toBe('?'); expect(option.text()).toBe(''); }); + + it('should select the correct option when label equals $viewValue', function() { + scope.numbersArray = ["Zero", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten"]; + scope.values= {}; + scope.selected='Four'; + createSelect({ + 'ng-model': 'selected', + 'ng-options': 'option.value as option.value for option in values' + }); + + scope.$apply(function() { + scope.values=scope.numbersArray.map(function(value, index) { + return { + id: index, + value: value + }; + }); + }); + expect(element[0].selectedIndex).toBe(4); + }); }); + describe('blank option', function() { it('should be compiled as template, be watched and updated', function() {