diff --git a/modules/@angular/platform-browser/src/dom/web_animations_player.ts b/modules/@angular/platform-browser/src/dom/web_animations_player.ts index 627a8055c6..ddd53e72a1 100644 --- a/modules/@angular/platform-browser/src/dom/web_animations_player.ts +++ b/modules/@angular/platform-browser/src/dom/web_animations_player.ts @@ -124,7 +124,11 @@ export class WebAnimationsPlayer implements AnimationPlayer { this._started = false; } - private _resetDomPlayerState() { this._player.cancel(); } + private _resetDomPlayerState() { + if (this._player) { + this._player.cancel(); + } + } restart(): void { this.reset(); diff --git a/modules/@angular/platform-browser/test/dom/web_animations_player_spec.ts b/modules/@angular/platform-browser/test/dom/web_animations_player_spec.ts index 8072279501..7bba7ed96d 100644 --- a/modules/@angular/platform-browser/test/dom/web_animations_player_spec.ts +++ b/modules/@angular/platform-browser/test/dom/web_animations_player_spec.ts @@ -175,6 +175,12 @@ export function main() { expect(data['keyframes']).toEqual([{opacity: '0.5'}, {opacity: '1'}]); }); + it('should allow the player to be destroyed before it is initialized', () => { + const elm = el('
'); + const player = new ExtendedWebAnimationsPlayer(elm, [], {}); + expect(() => { player.destroy(); }).not.toThrowError(); + }); + describe('previousStyle', () => { it('should merge keyframe styles based on the previous styles passed in when the player has finished its operation', () => {