動的コンポーネントを作成するために、Angular 2 APIのComponentResolver
とDynamicComponentResolver
を見てきましたが、私はそれらのAPIとは異なる点があります。ng2 - テンプレートに基づいて動的にコンポーネントを作成する
クラス名の文字列に基づいてコンポーネントを作成する方法はありますか?
たとえば、構成可能なグラフダッシュボードを作成します。
user.charts = [
{ type: 'LineChartComponent', position: ... }
{ type: 'BarChartComponent', position: ... }
];
どこtype
です:私は、JSONとしてこのデータをロードすると、各ユーザーのレイアウトは、彼らがここで2倍折れ線グラフにしたい旨、データベースに格納され、そこに3倍棒グラフなどは
それは何かのように見えます私が反射的に作成したいコンポーネントのクラス名。
これまでのところ、私は次のようしている:
this.chartMap = {
'LineChartComponent': LineChartComponent
};
let config = this.configuration;
let chartComponentType = this.chartMap[config.type];
let factory = this.componentFactory.resolveComponentFactory(chartComponentType);
let component = factory.create(this.injector);
component.instance.configuration = config;
this.chartContainer.insert(component.hostView);
しかし、全体的なアイデアはchartMap
の必要性を排除することです。どのようにして、そのクラスへの参照を持たずに文字列に基づいてこのクラスを反映させることができますか?
に感謝しなければならないが、このアプローチは私に壊れやすいと思われること。コンポーネントファクトリのレジストリがAngularによって公開されていない場合は、セレクタよりもクラス名を使用したいと思います。質問は、角型の質問よりもTypescriptの質問になります。つまり、文字列 "MyComponent"を使用して型MyComponentをインスタンス化する方法 – parliament
うわー、それは私が笑にコメントする前に速い更新でした。新しいバージョンのplnkrを更新してもらえますか?私はリンクが両方とも同じであると思います。あなたはおそらくそれをフォークする必要があります – parliament
私はコードを追加しました – yurzui