aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/ng/directive/select.js14
-rw-r--r--test/ng/directive/selectSpec.js24
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',