diff --git a/packages/compiler/src/render3/r3_deferred_triggers.ts b/packages/compiler/src/render3/r3_deferred_triggers.ts index fb28325ccb8..8917e412880 100644 --- a/packages/compiler/src/render3/r3_deferred_triggers.ts +++ b/packages/compiler/src/render3/r3_deferred_triggers.ts @@ -15,7 +15,7 @@ import {BindingParser} from '../template_parser/binding_parser'; import * as t from './r3_ast'; /** Pattern for a timing value in a trigger. */ -const TIME_PATTERN = /^\d+(ms|s)?$/; +const TIME_PATTERN = /^\d+\.?\d*(ms|s)?$/; /** Pattern for a separator between keywords in a trigger expression. */ const SEPARATOR_PATTERN = /^\s$/; @@ -440,5 +440,5 @@ export function parseDeferredTime(value: string): number|null { } const [time, units] = match; - return parseInt(time) * (units === 's' ? 1000 : 1); + return parseFloat(time) * (units === 's' ? 1000 : 1); } diff --git a/packages/compiler/test/render3/r3_template_transform_spec.ts b/packages/compiler/test/render3/r3_template_transform_spec.ts index 0c17a70cf11..ce7265a49e6 100644 --- a/packages/compiler/test/render3/r3_template_transform_spec.ts +++ b/packages/compiler/test/render3/r3_template_transform_spec.ts @@ -807,7 +807,7 @@ describe('R3 template transform', () => { ]); }); - it('should parse a deferred block with a timeout set in seconds', () => { + it('should parse a deferred block with a timer set in seconds', () => { expectFromHtml('@defer (on timer(10s)){hello}').toEqual([ ['DeferredBlock'], ['TimerDeferredTrigger', 10000], @@ -815,7 +815,15 @@ describe('R3 template transform', () => { ]); }); - it('should parse a deferred block with a timeout that has no units', () => { + it('should parse a deferred block with a timer with a decimal point', () => { + expectFromHtml('@defer (on timer(1.5s)){hello}').toEqual([ + ['DeferredBlock'], + ['TimerDeferredTrigger', 1500], + ['Text', 'hello'], + ]); + }); + + it('should parse a deferred block with a timer that has no units', () => { expectFromHtml('@defer (on timer(100)){hello}').toEqual([ ['DeferredBlock'], ['TimerDeferredTrigger', 100], @@ -883,12 +891,12 @@ describe('R3 template transform', () => { it('should parse a loading block with parameters', () => { expectFromHtml( '@defer{}' + - '@loading (after 100ms; minimum 1s){Loading...}') + '@loading (after 100ms; minimum 1.5s){Loading...}') .toEqual([ ['DeferredBlock'], ['Element', 'calendar-cmp'], ['BoundAttribute', 0, 'date', 'current'], - ['DeferredBlockLoading', 'after 100ms', 'minimum 1000ms'], + ['DeferredBlockLoading', 'after 100ms', 'minimum 1500ms'], ['Text', 'Loading...'], ]); }); @@ -896,12 +904,12 @@ describe('R3 template transform', () => { it('should parse a placeholder block with parameters', () => { expectFromHtml( '@defer {}' + - '@placeholder (minimum 1s){Placeholder...}') + '@placeholder (minimum 1.5s){Placeholder...}') .toEqual([ ['DeferredBlock'], ['Element', 'calendar-cmp'], ['BoundAttribute', 0, 'date', 'current'], - ['DeferredBlockPlaceholder', 'minimum 1000ms'], + ['DeferredBlockPlaceholder', 'minimum 1500ms'], ['Text', 'Placeholder...'], ]); });