diff --git a/src/ng/directive/validators.js b/src/ng/directive/validators.js index 85682fb07ea8..6c50e6124dd1 100644 --- a/src/ng/directive/validators.js +++ b/src/ng/directive/validators.js @@ -69,6 +69,7 @@ var requiredDirective = ['$parse', function($parse) { link: function(scope, elm, attr, ctrl) { if (!ctrl) return; var oldVal = attr.required || $parse(attr.ngRequired)(scope); + var evaluated = false; attr.required = true; // force truthy in case we are on non input element @@ -77,9 +78,10 @@ var requiredDirective = ['$parse', function($parse) { }; attr.$observe('required', function(val) { - if (oldVal !== val) { + if (oldVal !== val || !evaluated) { oldVal = val; ctrl.$validate(); + evaluated = true; } }); } diff --git a/test/ng/directive/validatorsSpec.js b/test/ng/directive/validatorsSpec.js index 2d89ce8abfce..6c3014166cb3 100644 --- a/test/ng/directive/validatorsSpec.js +++ b/test/ng/directive/validatorsSpec.js @@ -707,6 +707,15 @@ describe('validators', function() { expect(helper.validationCounter.required).toBe(1); }); + it('should validate once when inside ngRepeat and ngRequired is false as ngRequired sets a default required flag of true', function() { + $rootScope.isRequired = false; + helper.compileInput( + '