Przeglądałem interfejsy API Angular 2 dla ComponentResolver
i DynamicComponentResolver
w celu tworzenia komponentów dynamicznych, ale mam na myśli coś innego niż te interfejsy API.ng2 - dynamiczne tworzenie komponentu opartego na szablonie
Czy jest jakiś sposób w NG2, aby utworzyć komponent na podstawie ciągu jego nazwy klasy?
Na przykład, Im buduje konfigurowalny pulpit wykresów. Układ każdego użytkownika są przechowywane w bazie danych, stwierdzając, że chcą 2x wykresy liniowe tutaj, 3x słupkowe tam itp
Kiedy załadować te dane jako JSON wygląda mniej więcej tak:
user.charts = [
{ type: 'LineChartComponent', position: ... }
{ type: 'BarChartComponent', position: ... }
];
Gdzie type
jest nazwa klasy składnika, którą chcę odzwierciedlić.
tej pory mam następujące:
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);
Ale cała idea jest wyeliminowanie potrzeby chartMap
. Jak mogę odzwierciedlić tę klasę w oparciu o ciąg znaków bez odniesienia do typu?
Dzięki ale takie podejście wydaje mi się krucha. Jeśli rejestr elementów składowych nie zostanie publicznie ujawniony przez Angular, wolałbym używać nazwy klasy niż selektora. Pytanie staje się bardziej pytaniem maszynowym niż pytaniem kątowym; to jest, jak utworzyć instancję typu 'MyComponent' przy użyciu łańcucha" MyComponent " – parliament
wow, która była szybką aktualizacją zanim nawet skomentowałem lol. Czy możesz zaktualizować nową wersję pnkr, myślę, że link jest taki sam dla obu. Prawdopodobnie będziesz musiał go rozwidlić – parliament
Dodałem kod – yurzui