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('