From f6710fefeb4d8f9d0ae54c7aa7813ae8090b5258 Mon Sep 17 00:00:00 2001 From: Tobias Bosch Date: Mon, 31 Oct 2016 15:38:15 -0700 Subject: [PATCH] refactor(compiler): make `view.disposable` array null if empty --- .../@angular/compiler/src/view_compiler/view_builder.ts | 2 +- modules/@angular/core/src/linker/view.ts | 6 ++++-- modules/@angular/core/src/linker/view_ref.ts | 7 ++++++- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/modules/@angular/compiler/src/view_compiler/view_builder.ts b/modules/@angular/compiler/src/view_compiler/view_builder.ts index d53667f07a..c5ab32ad42 100644 --- a/modules/@angular/compiler/src/view_compiler/view_builder.ts +++ b/modules/@angular/compiler/src/view_compiler/view_builder.ts @@ -573,7 +573,7 @@ function generateCreateMethod(view: CompileView): o.Statement[] { [ view.lastRenderNode, o.literalArr(view.nodes.map(node => node.renderNode)), - o.literalArr(view.disposables), + view.disposables.length ? o.literalArr(view.disposables) : o.NULL_EXPR, ]) .toStmt(), new o.ReturnStatement(resultExpr) diff --git a/modules/@angular/core/src/linker/view.ts b/modules/@angular/core/src/linker/view.ts index b7d2674b79..58e1abfb4c 100644 --- a/modules/@angular/core/src/linker/view.ts +++ b/modules/@angular/core/src/linker/view.ts @@ -120,8 +120,10 @@ export abstract class AppView { } var hostElement = this.type === ViewType.COMPONENT ? this.declarationAppElement.nativeElement : null; - for (var i = 0; i < this.disposables.length; i++) { - this.disposables[i](); + if (this.disposables) { + for (var i = 0; i < this.disposables.length; i++) { + this.disposables[i](); + } } this.destroyInternal(); this.dirtyParentQueriesInternal(); diff --git a/modules/@angular/core/src/linker/view_ref.ts b/modules/@angular/core/src/linker/view_ref.ts index 6a8c753634..9835fe95c1 100644 --- a/modules/@angular/core/src/linker/view_ref.ts +++ b/modules/@angular/core/src/linker/view_ref.ts @@ -117,7 +117,12 @@ export class ViewRef_ implements EmbeddedViewRef, ChangeDetectorRef { this.markForCheck(); } - onDestroy(callback: Function) { this._view.disposables.push(callback); } + onDestroy(callback: Function) { + if (!this._view.disposables) { + this._view.disposables = []; + } + this._view.disposables.push(callback); + } destroy() { this._view.detachAndDestroy(); } }