feat(elements): provide type, not factory; remove config need (#22413)
PR Close #22413
This commit is contained in:

committed by
Miško Hevery

parent
d2be675acc
commit
19368085aa
@ -111,11 +111,15 @@ class FakeComponentFactoryResolver extends ComponentFactoryResolver {
|
||||
}
|
||||
|
||||
class FakeModuleRef extends NgModuleRef<WithCustomElementComponent> {
|
||||
injector: Injector;
|
||||
injector = jasmine.createSpyObj('injector', ['get']);
|
||||
componentFactoryResolver = new FakeComponentFactoryResolver(this.modulePath);
|
||||
instance: WithCustomElementComponent = new FakeCustomElementModule();
|
||||
|
||||
constructor(private modulePath) { super(); }
|
||||
constructor(private modulePath) {
|
||||
super();
|
||||
|
||||
this.injector.get.and.returnValue(this.componentFactoryResolver);
|
||||
}
|
||||
|
||||
destroy() {}
|
||||
onDestroy(callback: () => void) {}
|
||||
|
@ -1,15 +1,14 @@
|
||||
import {
|
||||
ComponentFactory,
|
||||
Inject,
|
||||
Injectable,
|
||||
NgModuleFactoryLoader,
|
||||
NgModuleRef,
|
||||
} from '@angular/core';
|
||||
import { ELEMENT_MODULE_PATHS_TOKEN, WithCustomElementComponent } from './element-registry';
|
||||
import { ELEMENT_MODULE_PATHS_TOKEN } from './element-registry';
|
||||
import { of } from 'rxjs/observable/of';
|
||||
import { Observable } from 'rxjs/Observable';
|
||||
import { fromPromise } from 'rxjs/observable/fromPromise';
|
||||
import { createNgElementConstructor, getConfigFromComponentFactory } from '@angular/elements';
|
||||
import { createNgElementConstructor } from '@angular/elements';
|
||||
|
||||
@Injectable()
|
||||
export class ElementsLoader {
|
||||
@ -45,12 +44,10 @@ export class ElementsLoader {
|
||||
return this.moduleFactoryLoader.load(modulePath).then(elementModuleFactory => {
|
||||
if (!this.elementsToLoad.has(selector)) { return; }
|
||||
|
||||
const injector = this.moduleRef.injector;
|
||||
const elementModuleRef = elementModuleFactory.create(injector);
|
||||
const componentFactory = this.getCustomElementComponentFactory(elementModuleRef);
|
||||
|
||||
const ngElementConfig = getConfigFromComponentFactory(componentFactory, injector);
|
||||
const NgElement = createNgElementConstructor(ngElementConfig);
|
||||
const elementModuleRef = elementModuleFactory.create(this.moduleRef.injector);
|
||||
const CustomElementComponent = elementModuleRef.instance.customElementComponent;
|
||||
const NgElement =
|
||||
createNgElementConstructor(CustomElementComponent, {injector: elementModuleRef.injector});
|
||||
|
||||
customElements!.define(selector, NgElement);
|
||||
this.elementsToLoad.delete(selector);
|
||||
@ -58,13 +55,4 @@ export class ElementsLoader {
|
||||
return customElements.whenDefined(selector);
|
||||
});
|
||||
}
|
||||
|
||||
/** Gets the component factory of the custom element defined on the NgModuleRef. */
|
||||
private getCustomElementComponentFactory(
|
||||
customElementModuleRef: NgModuleRef<WithCustomElementComponent>): ComponentFactory<string> {
|
||||
const resolver = customElementModuleRef.componentFactoryResolver;
|
||||
const customElementComponent = customElementModuleRef.instance.customElementComponent;
|
||||
|
||||
return resolver.resolveComponentFactory(customElementComponent);
|
||||
}
|
||||
}
|
||||
|
@ -131,7 +131,7 @@
|
||||
tslib "^1.7.1"
|
||||
|
||||
"@angular/elements@file:../dist/packages-dist/elements":
|
||||
version "6.0.0-beta.5-8531ff3335"
|
||||
version "6.0.0-beta.5-0968e9f16a"
|
||||
dependencies:
|
||||
tslib "^1.7.1"
|
||||
|
||||
@ -340,10 +340,6 @@
|
||||
version "1.0.8"
|
||||
resolved "https://registry.yarnpkg.com/@webcomponents/custom-elements/-/custom-elements-1.0.8.tgz#b7b8ef7248f7681d1ad4286a0ada5fe3c2bc7228"
|
||||
|
||||
"@webcomponents/webcomponentsjs@^1.1.0":
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/@webcomponents/webcomponentsjs/-/webcomponentsjs-1.1.0.tgz#1392799c266fca142622a720176f688beb74d181"
|
||||
|
||||
JSONStream@^1.2.1:
|
||||
version "1.3.1"
|
||||
resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.1.tgz#707f761e01dae9e16f1bcf93703b78c70966579a"
|
||||
|
Reference in New Issue
Block a user