From 602836800be4364cb6cd83fb00e0822c852dd9d8 Mon Sep 17 00:00:00 2001 From: laco0416 Date: Thu, 12 May 2016 01:05:39 +0900 Subject: [PATCH] feat(ChangeDetectorRef): make detectChanges() correct Closes #8599 --- modules/@angular/core/src/linker/view.ts | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/modules/@angular/core/src/linker/view.ts b/modules/@angular/core/src/linker/view.ts index 32eced7f86..50385247c1 100644 --- a/modules/@angular/core/src/linker/view.ts +++ b/modules/@angular/core/src/linker/view.ts @@ -279,8 +279,7 @@ export abstract class AppView { detectChanges(throwOnChange: boolean): void { var s = _scope_check(this.clazz); - if (this.cdMode === ChangeDetectionStrategy.Detached || - this.cdMode === ChangeDetectionStrategy.Checked || + if (this.cdMode === ChangeDetectionStrategy.Checked || this.cdState === ChangeDetectorState.Errored) return; if (this.destroyed) { @@ -304,13 +303,17 @@ export abstract class AppView { detectContentChildrenChanges(throwOnChange: boolean) { for (var i = 0; i < this.contentChildren.length; ++i) { - this.contentChildren[i].detectChanges(throwOnChange); + var child = this.contentChildren[i]; + if (child.cdMode === ChangeDetectionStrategy.Detached) continue; + child.detectChanges(throwOnChange); } } detectViewChildrenChanges(throwOnChange: boolean) { for (var i = 0; i < this.viewChildren.length; ++i) { - this.viewChildren[i].detectChanges(throwOnChange); + var child = this.viewChildren[i]; + if (child.cdMode === ChangeDetectionStrategy.Detached) continue; + child.detectChanges(throwOnChange); } }