@binariedMeとこのブログ投稿http://blog.lacolaco.net/post/dynamic-component-creation-in-angular-2/に続いて、私はあなたのために役立つ解決法を構築することができました。 AJAX呼び出しを使用し、返されたHTMLコンテンツからカスタムコンポーネントを動的に作成すると、新しいmy-ng-includeカスタムディレクティブを作成する際にこの問題が解決されます。次のように
import {
Component,
Directive,
ComponentFactory,
ComponentMetadata,
ComponentResolver,
Input,
ReflectiveInjector,
ViewContainerRef
} from '@angular/core';
import { Http } from '@angular/http';
export function createComponentFactory(resolver: ComponentResolver, metadata: ComponentMetadata): Promise<ComponentFactory<any>> {
const cmpClass = class DynamicComponent {};
const decoratedCmp = Component(metadata)(cmpClass);
return resolver.resolveComponent(decoratedCmp);
}
@Directive({
selector: 'my-ng-include'
})
export class MyNgInclude {
@Input() src: string;
constructor(private vcRef: ViewContainerRef, private resolver: ComponentResolver, private http: Http) {
}
ngOnChanges() {
if (!this.src) return;
this.http.get(this.src).toPromise().then((res) => {
const metadata = new ComponentMetadata({
selector: 'dynamic-html',
template: res.text(),
});
createComponentFactory(this.resolver, metadata)
.then(factory => {
const injector = ReflectiveInjector.fromResolvedProviders([], this.vcRef.parentInjector);
this.vcRef.createComponent(factory, 0, injector, []);
});
});
}
}
は単にそれを使用:// stackoverflowの:
<my-ng-include [src]="someChangingProperty"></my-ng-include>
このhttp://stackoverflow.com/questions/34457716/dynamic-template-transclusion-in-angular2またはhttpをしてみてください。 com/questions/33034930/how-to-use-angular2-dynamiccomponentloader-in-es6またはhttps://angular.io/docs/ts/latest/api/core/DynamicComponentLoader-class.html – Gary