From b44b06c2c9f99598fd5fa2c88937e4ac7dd3cbab Mon Sep 17 00:00:00 2001 From: Tobias Bosch Date: Thu, 23 Jul 2015 12:02:40 -0700 Subject: [PATCH] fix(projection): allow to project to a non text node We already had a test for this, but too low level that it did not catch this null value in `hasNativeShadowRoot` Fixes #3230 Closes #3241 --- .../src/render/dom/view/element_binder.ts | 3 ++- .../src/render/dom/view/proto_view_merger.ts | 2 +- .../compiler/projection_integration_spec.ts | 19 +++++++++++++++++++ 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/modules/angular2/src/render/dom/view/element_binder.ts b/modules/angular2/src/render/dom/view/element_binder.ts index 29c721754bcf9..67ac3201b3abb 100644 --- a/modules/angular2/src/render/dom/view/element_binder.ts +++ b/modules/angular2/src/render/dom/view/element_binder.ts @@ -1,5 +1,6 @@ import {AST} from 'angular2/change_detection'; import {List, ListWrapper} from 'angular2/src/facade/collection'; +import {isPresent} from 'angular2/src/facade/lang'; export class DomElementBinder { textNodeIndices: List; @@ -23,7 +24,7 @@ export class DomElementBinder { this.eventLocals = eventLocals; this.localEvents = localEvents; this.globalEvents = globalEvents; - this.hasNativeShadowRoot = hasNativeShadowRoot; + this.hasNativeShadowRoot = isPresent(hasNativeShadowRoot) ? hasNativeShadowRoot : false; } } diff --git a/modules/angular2/src/render/dom/view/proto_view_merger.ts b/modules/angular2/src/render/dom/view/proto_view_merger.ts index f977ecc3157d6..ce4ff6e82976f 100644 --- a/modules/angular2/src/render/dom/view/proto_view_merger.ts +++ b/modules/angular2/src/render/dom/view/proto_view_merger.ts @@ -339,7 +339,7 @@ function updateElementBinderTextNodeIndices(elementBinder: DomElementBinder, eventLocals: null, localEvents: [], globalEvents: [], - hasNativeShadowRoot: null + hasNativeShadowRoot: false }); } else { result = new DomElementBinder({ diff --git a/modules/angular2/test/core/compiler/projection_integration_spec.ts b/modules/angular2/test/core/compiler/projection_integration_spec.ts index de57bcdd09d76..89241887b805c 100644 --- a/modules/angular2/test/core/compiler/projection_integration_spec.ts +++ b/modules/angular2/test/core/compiler/projection_integration_spec.ts @@ -73,6 +73,25 @@ export function main() { }); })); + it('should support projecting text interpolation to a non bound element', + inject([TestComponentBuilder, AsyncTestCompleter], (tcb: TestComponentBuilder, async) => { + tcb.overrideView( + Simple, + new viewAnn.View( + {template: 'SIMPLE(
)', directives: []})) + .overrideView( + MainComp, + new viewAnn.View({template: '{{text}}', directives: [Simple]})) + .createAsync(MainComp) + .then((main) => { + + main.componentInstance.text = 'A'; + main.detectChanges(); + expect(main.nativeElement).toHaveText('SIMPLE(A)'); + async.done(); + }); + })); + it('should not show the light dom even if there is no content tag', inject([TestComponentBuilder, AsyncTestCompleter], (tcb: TestComponentBuilder, async) => { tcb.overrideView(MainComp,