fix(select): support optgroup + select[multiple] combo

Closes #1553
This commit is contained in:
_pants 2012-11-29 11:46:51 -05:00 committed by Igor Minar
parent 15183f3e1f
commit 26adeb119b
2 changed files with 23 additions and 2 deletions

View file

@ -265,7 +265,7 @@ var selectDirective = ['$compile', '$parse', function($compile, $parse) {
var lastView;
ctrl.$render = function() {
var items = new HashMap(ctrl.$viewValue);
forEach(selectElement.children(), function(option) {
forEach(selectElement.find('option'), function(option) {
option.selected = isDefined(items.get(option.value));
});
};
@ -282,7 +282,7 @@ var selectDirective = ['$compile', '$parse', function($compile, $parse) {
selectElement.bind('change', function() {
scope.$apply(function() {
var array = [];
forEach(selectElement.children(), function(option) {
forEach(selectElement.find('option'), function(option) {
if (option.selected) {
array.push(option.value);
}

View file

@ -405,6 +405,27 @@ describe('select', function() {
expect(element).toEqualSelect(['A'], ['B']);
});
it('should work with optgroups', function() {
compile('<select ng-model="selection" multiple>' +
'<optgroup label="group1">' +
'<option>A</option>' +
'<option>B</option>' +
'</optgroup>' +
'</select>');
expect(element).toEqualSelect('A', 'B');
expect(scope.selection).toBeUndefined();
scope.$apply(function() {
scope.selection = ['A'];
});
expect(element).toEqualSelect(['A'], 'B');
scope.$apply(function() {
scope.selection.push('B');
});
expect(element).toEqualSelect(['A'], ['B']);
});
it('should require', function() {
compile(