Как я могу получить метаданные для текущего модуля в Angular 2?

Я хочу получить метаданные для текущего NgModule, чтобы получить список declarations и providers, чтобы заполнить динамический модуль, который я создаю для отображения компонентов в модальном режиме.

Как это сделать?


person Andre Soares    schedule 27.01.2017    source источник


Ответы (1)


Вы можете получить доступ к объявлениям с помощью пакета reflect-metadata. Однако вам необходимо установить этот пакет и включить его в свой проект. После этого вы можете получить такие аннотации:

let annotations: DecoratorFactory[] = Reflect.getMetadata('annotations', ModuleClass);

Если @NgModule является единственной аннотацией, а я предполагаю, что это так, вы можете получить доступ к таким объявлениям, в противном случае вам придется угадывать правильное index:

let declarations: any[] = annotations[0].declarations;

См. этот ответ для дополнительной справки.

person Poul Kruijt    schedule 27.01.2017
comment
А что, если я хочу получить текущий модуль, не зная, какой именно? - person Andre Soares; 27.01.2017
comment
К сожалению, нет такой вещи, как текущий модуль. Потому что ваше приложение может состоять из нескольких NgModules одновременно. Что именно вы пытаетесь сделать? - person Poul Kruijt; 27.01.2017
comment
Если вы можете дать реализацию plnkr.co, это будет здорово - person Ali Abbas; 25.05.2017