From c1579222bd74f83f73d1d6c7e1636c7ebd0ea3bc Mon Sep 17 00:00:00 2001 From: vsavkin Date: Thu, 30 Apr 2015 10:16:12 -0700 Subject: [PATCH] fix(view): changed view manager to hydrate change detector after creating directives --- .../src/core/compiler/view_manager_utils.js | 3 +-- modules/angular2/src/test_lib/utils.js | 2 +- .../core/compiler/view_manager_utils_spec.js | 26 ++++++++++++++++++- 3 files changed, 27 insertions(+), 4 deletions(-) diff --git a/modules/angular2/src/core/compiler/view_manager_utils.js b/modules/angular2/src/core/compiler/view_manager_utils.js index 3517ae1172..acf50bc8b6 100644 --- a/modules/angular2/src/core/compiler/view_manager_utils.js +++ b/modules/angular2/src/core/compiler/view_manager_utils.js @@ -185,7 +185,6 @@ export class AppViewManagerUtils { } view.context = context; view.locals.parent = parentLocals; - view.changeDetector.hydrate(view.context, view.locals, view); var binders = view.proto.elementBinders; for (var i = 0; i < binders.length; ++i) { @@ -212,7 +211,7 @@ export class AppViewManagerUtils { } } } - + view.changeDetector.hydrate(view.context, view.locals, view); } _setUpEventEmitters(view:viewModule.AppView, elementInjector:eli.ElementInjector, boundElementIndex:number) { diff --git a/modules/angular2/src/test_lib/utils.js b/modules/angular2/src/test_lib/utils.js index 89e968d0e0..3e88ffe649 100644 --- a/modules/angular2/src/test_lib/utils.js +++ b/modules/angular2/src/test_lib/utils.js @@ -14,7 +14,7 @@ export class Log { } fn(value) { - return () => { + return (a1 = null, a2 = null, a3 = null, a4 = null, a5 = null) => { ListWrapper.push(this._result, value); } } diff --git a/modules/angular2/test/core/compiler/view_manager_utils_spec.js b/modules/angular2/test/core/compiler/view_manager_utils_spec.js index ecfb8a55ec..8b6996990a 100644 --- a/modules/angular2/test/core/compiler/view_manager_utils_spec.js +++ b/modules/angular2/test/core/compiler/view_manager_utils_spec.js @@ -12,7 +12,8 @@ import { beforeEachBindings, it, xit, - SpyObject, proxy + SpyObject, proxy, + Log } from 'angular2/test_lib'; import {Injector, bind} from 'angular2/di'; @@ -114,6 +115,29 @@ export function main() { }); + describe("hydrateComponentView", () => { + + it("should hydrate the change detector after hydrating element injectors", () => { + var log = new Log(); + + var componentView = createView(createProtoView([createEmptyElBinder()])); + var hostView = createView(createProtoView([createComponentElBinder(createProtoView())])); + hostView.componentChildViews = [componentView]; + + // (() => () nonsense is required until our transpiler supports type casting + var spyEi = (() => componentView.elementInjectors[0])(); + spyEi.spy('instantiateDirectives').andCallFake(log.fn('instantiateDirectives')); + + var spyCd = (() => componentView.changeDetector)(); + spyCd.spy('hydrate').andCallFake(log.fn('hydrateCD')); + + utils.hydrateComponentView(hostView, 0) + + expect(log.result()).toEqual('instantiateDirectives; hydrateCD'); + }); + + }); + describe('shared hydrate functionality', () => { it("should set up event listeners", () => {