Angular2 - динамически загружать компонент из модуля
в моем угловом приложении у меня есть следующее:
export class MyComponent {
subcompPath = "path-to-subcomp#SubcompClassName";
@ViewChild("placeholder", { read: ViewComponentRef }) placeholderRef: ViewComponentRef;
/* Constructor where Compiler, ComponentFactoryResolver are injected */
loadSubcomponent() {
let [path, componentName] = this.subcompPath.split("#");
(<any>window).System.import(path)
.then((module: any) => module[componentName])
.then((type: any) => {
return this._compiler.compileComponentAsync(type)
})
.then((factory: any) => {
let componentRef = this.placeholderRef.createComponent(factory, 0);
});
}
}
Мой подкомпонент объявляет поставщиков и прочее, директивы и каналы.
И теперь RC6 хочет сломать все снова. Компоненты не могут объявлять директивы и каналы, но они должны находиться в модуле, где объявлен компонент. Поэтому я должен загрузить с SystemJS не сам компонент, а модуль. Хорошо, а потом я должен использовать
return this._compiler.compileModuleAndAllComponentsAsync(type)
Хорошо, но как мне получить ссылку на фабрику этого конкретного компонента? Эта фабрика - все, что мне нужно, placeholderRef хочет ее в своем методе createComponent, верно?
Я попытался покопаться в исходном коде angular2 из github, но он довольно обширный, я должен попробовать из VS Code или чего-то другого, с intellisense, но я ленивый ... и я должен прочитать этот материал из документации, которая довольно тусклая в angular.io для этого конкретного аргумента, который является ленивой загрузкой компонентов и модулей БЕЗ маршрутизатора.
Любая помощь приветствуется, я думаю, что решение простое в применении, но его трудно найти без официальной документации.