Я искал API-интерфейс Angular 2 для ComponentResolver
и DynamicComponentResolver
для создания динамических компонентов, но у меня есть что-то другое в виду, чем предлагаемые API.ng2 - динамическое создание компонента на основе шаблона
Есть ли какой-либо путь в NG2 для создания компонента на основе строки его имени класса?
Например, Im создает настраиваемую панель инструментов диаграмм. расположение каждого пользователя хранится в базе данных, заявляя, что они хотят 2x линейных диаграмм здесь, 3x гистограммы там и т.д.
Когда я загружаю эти данные в формате JSON это выглядит примерно так:
user.charts = [
{ type: 'LineChartComponent', position: ... }
{ type: 'BarChartComponent', position: ... }
];
Где type
является имя класса компонента, которое я хочу отразить.
До сих пор у меня есть следующие:
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 я предпочитаю использовать имя класса, чем селектор. Затем вопрос становится скорее вопросом машинописного текста, чем угловым; то есть, как создать экземпляр типа MyComponent с помощью строки «MyComponent» – parliament
wow, которая была быстрым обновлением, прежде чем я даже прокомментировал LOL. Можете ли вы обновить новую версию plnkr, я думаю, что эта же ссылка для обоих. Вам, вероятно, придется разветвить его – parliament
Я добавил код – yurzui