Skip to content

Commit 2ae10f6

Browse files
committed
fix(numberFilter): pass through null and undefined values
When these special values are passed through one-time binding will work correctly. BREAKING CHANGE: previously the number filter would convert null and undefined values into empty string, after this change these values will be passed through. Only cases when the number filter is chained with another filter that doesn't expect null/undefined will be affected. This should be very rare. This change will not change the visual output of the filter because the interpolation will convert the null/undefined to an empty string. Closes angular#8605 Closes angular#8842
1 parent c2aaddb commit 2ae10f6

File tree

2 files changed

+12
-4
lines changed

2 files changed

+12
-4
lines changed

src/ng/filter/filters.js

+7-3
Original file line numberDiff line numberDiff line change
@@ -117,14 +117,18 @@ numberFilter.$inject = ['$locale'];
117117
function numberFilter($locale) {
118118
var formats = $locale.NUMBER_FORMATS;
119119
return function(number, fractionSize) {
120-
return formatNumber(number, formats.PATTERNS[0], formats.GROUP_SEP, formats.DECIMAL_SEP,
121-
fractionSize);
120+
121+
// if null or undefined pass it through
122+
return (number == null)
123+
? number
124+
: formatNumber(number, formats.PATTERNS[0], formats.GROUP_SEP, formats.DECIMAL_SEP,
125+
fractionSize);
122126
};
123127
}
124128

125129
var DECIMAL_SEP = '.';
126130
function formatNumber(number, pattern, groupSep, decimalSep, fractionSize) {
127-
if (number == null || !isFinite(number) || isObject(number)) return '';
131+
if (!isFinite(number) || isObject(number)) return '';
128132

129133
var isNegative = number < 0;
130134
number = Math.abs(number);

test/ng/filter/filtersSpec.js

+5-1
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,6 @@ describe('filters', function() {
134134
expect(number(1234)).toEqual('1,234');
135135
expect(number(1234.5678)).toEqual('1,234.568');
136136
expect(number(Number.NaN)).toEqual('');
137-
expect(number(null)).toEqual('');
138137
expect(number({})).toEqual('');
139138
expect(number([])).toEqual('');
140139
expect(number(+Infinity)).toEqual('');
@@ -165,6 +164,11 @@ describe('filters', function() {
165164
expect(number(0, 8)).toEqual("0.00000000");
166165
});
167166

167+
it('should pass through null and undefined to be compatible with one-time binding', function() {
168+
expect(number(null)).toBe(null);
169+
expect(number(undefined)).toBe(undefined);
170+
});
171+
168172
it('should filter exponentially large numbers', function() {
169173
expect(number(1e50)).toEqual('1e+50');
170174
expect(number(-2e100)).toEqual('-2e+100');

0 commit comments

Comments
 (0)