Skip to content

Commit 618716f

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
1 parent d72e9a5 commit 618716f

File tree

2 files changed

+10
-4
lines changed

2 files changed

+10
-4
lines changed

src/ng/filter/filters.js

+5-3
Original file line numberDiff line numberDiff line change
@@ -115,14 +115,16 @@ numberFilter.$inject = ['$locale'];
115115
function numberFilter($locale) {
116116
var formats = $locale.NUMBER_FORMATS;
117117
return function(number, fractionSize) {
118-
return formatNumber(number, formats.PATTERNS[0], formats.GROUP_SEP, formats.DECIMAL_SEP,
119-
fractionSize);
118+
return (number == null)
119+
? number
120+
: formatNumber(number, formats.PATTERNS[0], formats.GROUP_SEP, formats.DECIMAL_SEP,
121+
fractionSize);
120122
};
121123
}
122124

123125
var DECIMAL_SEP = '.';
124126
function formatNumber(number, pattern, groupSep, decimalSep, fractionSize) {
125-
if (number == null || !isFinite(number) || isObject(number)) return '';
127+
if (!isFinite(number) || isObject(number)) return '';
126128

127129
var isNegative = number < 0;
128130
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)