diff --git a/lib/core_dom/block_factory.dart b/lib/core_dom/block_factory.dart index f37c92443..ba006da4e 100644 --- a/lib/core_dom/block_factory.dart +++ b/lib/core_dom/block_factory.dart @@ -356,13 +356,19 @@ class _ComponentFactory { shadowDom.setInnerHtml('', treeSanitizer: treeSanitizer); } if (blockFuture != null) { - return blockFuture.then((BlockFactory blockFactory) => attachBlockToShadowDom(blockFactory)); + return blockFuture.then((BlockFactory blockFactory) { + if (!shadowScope.isAttached) return shadowDom; + return attachBlockToShadowDom(blockFactory); + }); } return shadowDom; })); controller = createShadowInjector(injector, templateLoader).get(type); if (controller is NgShadowRootAware) { - templateLoader.template.then((controller as NgShadowRootAware).onShadowRoot); + templateLoader.template.then((_) { + if (!shadowScope.isAttached) return; + (controller as NgShadowRootAware).onShadowRoot(shadowDom); + }); } return controller; } diff --git a/test/core_dom/compiler_spec.dart b/test/core_dom/compiler_spec.dart index a8b9c4239..7fe0b8a9b 100644 --- a/test/core_dom/compiler_spec.dart +++ b/test/core_dom/compiler_spec.dart @@ -484,7 +484,8 @@ main() => describe('dte.compiler', () { expect(element.textWithShadow()).toEqual('WORKED'); }))); - it('should should not call attach after scope is destroyed', async(inject((Logger logger) { + it('should should not call attach after scope is destroyed', async(inject((Logger logger, MockHttpBackend backend) { + backend.whenGET('foo.html').respond('
WORKED
'); var element = $(''); var scope = rootScope.createChild({}); $compile(element, directives)(injector.createChild([new Module()..value(Scope, scope)]), element); @@ -492,6 +493,7 @@ main() => describe('dte.compiler', () { scope.destroy(); rootScope.apply(); + microLeap(); expect(logger).toEqual(['SimpleAttachComponent']); }))); @@ -857,11 +859,14 @@ class ExprAttrComponent { } } -@NgComponent(selector: 'simple-attach') -class SimpleAttachComponent implements NgAttachAware { +@NgComponent( + selector: 'simple-attach', + templateUrl: 'foo.html') +class SimpleAttachComponent implements NgAttachAware, NgShadowRootAware { Logger logger; SimpleAttachComponent(this.logger) { logger('SimpleAttachComponent'); } attach() => logger('attach'); + onShadowRoot(_) => logger('onShadowRoot'); }