diff options
| -rw-r--r-- | src/ng/directive/select.js | 14 | ||||
| -rw-r--r-- | test/ng/directive/selectSpec.js | 24 | 
2 files changed, 27 insertions, 11 deletions
| diff --git a/src/ng/directive/select.js b/src/ng/directive/select.js index d87fa5d3..3dbb5b8e 100644 --- a/src/ng/directive/select.js +++ b/src/ng/directive/select.js @@ -221,18 +221,10 @@ var selectDirective = ['$compile', '$parse', function($compile,   $parse) {        selectCtrl.init(ngModelCtrl, nullOption, unknownOption);        // required validator -      if (multiple && (attr.required || attr.ngRequired)) { -        var requiredValidator = function(value) { -          ngModelCtrl.$setValidity('required', !attr.required || (value && value.length)); -          return value; +      if (multiple) { +        ngModelCtrl.$isEmpty = function(value) { +          return !value || value.length === 0;          }; - -        ngModelCtrl.$parsers.push(requiredValidator); -        ngModelCtrl.$formatters.unshift(requiredValidator); - -        attr.$observe('required', function() { -          requiredValidator(ngModelCtrl.$viewValue); -        });        }        if (optionsExp) setupAsOptions(scope, element, ngModelCtrl); diff --git a/test/ng/directive/selectSpec.js b/test/ng/directive/selectSpec.js index ac0cc70d..83591949 100644 --- a/test/ng/directive/selectSpec.js +++ b/test/ng/directive/selectSpec.js @@ -1215,6 +1215,30 @@ describe('select', function() {        }); +      it('should treat an empty array as invalid when `multiple` attribute used', function() { +        createSelect({ +          'ng-model': 'value', +          'ng-options': 'item.name for item in values', +          'ng-required': 'required', +          'multiple': '' +        }, true); + +        scope.$apply(function() { +          scope.value = []; +          scope.values = [{name: 'A', id: 1}, {name: 'B', id: 2}]; +          scope.required = true; +        }); +        expect(element).toBeInvalid(); + +        scope.$apply(function() { +          // ngModelWatch does not set objectEquality flag +          // array must be replaced in order to trigger $formatters +          scope.value = [scope.values[0]]; +        }); +        expect(element).toBeValid(); +      }); + +        it('should allow falsy values as values', function() {          createSelect({            'ng-model': 'value', | 
