Skip to content

Commit 5ce3053

Browse files
committed
fix(ngModel): treat synchronous validators as boolean always
Change synchronous validators to convert the return to boolean value. Prevent unexpected behavior when returning `undefined`. Closes angular#14734 BREAKING CHANGE: Previously, only a literal `false` return would resolve as the synchronous validator failing. Now, all traditionally false JavaScript values are treated as failing the validator, as one would naturally expect. Specifically, the values `0` (the number zero), `null`, `NaN` and `''` (the empty string) used to considered valid (passing) and they are now considered invalid (failing). The value `undefined` was treated similarly to a pending asynchronous validator, causing the validation to be pending. `undefined` is also now considered invalid. To migrate, make sure your synchronous validators are returning either a literal `true` or a literal `false` value. For most code, we expect this to already be the case. Only a very small subset of projects will be affected. Namely, anyone using `undefined` or any falsy value as a return will now see their validation failing, whereas previously falsy values other than `undefined` would have been seen as passing and `undefined` would have been seen as pending.
1 parent 7e4bf60 commit 5ce3053

File tree

1 file changed

+1
-1
lines changed

1 file changed

+1
-1
lines changed

test/ng/directive/ngModelSpec.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -847,7 +847,7 @@ describe('ngModel', function() {
847847
expect(ctrl.$valid).toBe(true);
848848
});
849849

850-
fit('should treat all responses as boolean for synchronous validators', function() {
850+
it('should treat all responses as boolean for synchronous validators', function() {
851851
// var curry = function(v) {
852852
// return function() {
853853
// return v;

0 commit comments

Comments
 (0)