diff --git a/src/select.js b/src/select.js index 3b81924b1..dea03af76 100644 --- a/src/select.js +++ b/src/select.js @@ -635,6 +635,15 @@ $select.onSelectCallback = $parse(attrs.onSelect); $select.onRemoveCallback = $parse(attrs.onRemove); + // When configured for multiple, override $isEmpty so that ng-required works as expected. + if ($select.multiple) { + var defaultIsEmptyFn = ngModel.$isEmpty; + + ngModel.$isEmpty = function(value) { + return (angular.isArray(value) && value.length === 0) || defaultIsEmptyFn(value); + }; + } + //From view --> model ngModel.$parsers.unshift(function (inputValue) { var locals = {}, diff --git a/test/select.spec.js b/test/select.spec.js index 461ec3c13..9c1b304f5 100644 --- a/test/select.spec.js +++ b/test/select.spec.js @@ -1520,6 +1520,13 @@ describe('ui-select tests', function() { .toBe("Wladimir Samantha Nicole "); }); + + it('should be marked invalid when required and empty', function() { + scope.selection.selectedMultiple = []; + var el = createUiSelectMultiple({required: true}); + expect(el.scope().$select.ngModel.$invalid).toBe(true); + expect(el.scope().$select.ngModel.$error.required).toBe(true); + }); }); describe('default configuration via uiSelectConfig', function() {