Я хочу динамически создать шаблон. Это необходимо использовать для создания ComponentType
в Время выполнения и разместить (даже заменить) его где-нибудь внутри хостингового компонента.
До RC4 я использовал ComponentResolver
, но с RC5 я получил сообщение:
ComponentResolver
устарел для динамической компиляции. Вместо этого используйтеComponentFactoryResolver
вместе с поставщиком@NgModule/@Component.entryComponents
или ANALYZE_FOR_ENTRY_COMPONENTS. Только для компиляции во время выполнения вы также можете использоватьCompiler.compileComponentSync/Async
.
Я нашел этот (официальный angular2) документ
Angular 2 Создание синхронного динамического компонента
И поймите, что я могу использовать либо
- Тип динамического
ngIf
сComponentFactoryResolver
. Если я передам известные компоненты в хостинг один внутри@Component({entryComponents: [comp1, comp2], ...})
, я могу использовать.resolveComponentFactory(componentToRender);
- Реальная компиляция времени выполнения с помощью
Compiler
...
Но вопрос в том, как использовать этот Compiler
? В примечании выше говорится, что я должен позвонить: Compiler.compileComponentSync/Async
- так как?
Например. Я хочу создать (на основе некоторых условий конфигурации) этот тип шаблона для одного вида настроек
<form>
<string-editor
[propertyName]="'code'"
[entity]="entity"
></string-editor>
<string-editor
[propertyName]="'description'"
[entity]="entity"
></string-editor>
...
а в другом случае этот (string-editor
заменяется на text-editor
)
<form>
<text-editor
[propertyName]="'code'"
[entity]="entity"
></text-editor>
...
И так далее (разные числа/дата/ссылка editors
по типам свойств, пропустили некоторые свойства для некоторых пользователей...). То есть это пример, реальная конфигурация может генерировать гораздо более разные и сложные шаблоны.
Шаблон меняет, поэтому я не могу использовать ComponentFactoryResolver
и передавать существующие... Мне нужно решение с Compiler
AOT и JitCompiler (бывший RuntimeCompiler)
Вы хотите использовать эти функции с AOT (компиляция заранее)? Вы получаете:
Ошибка: ошибка обнаружила статические значения разрешения символов. Вызов функций не поддерживается. Рассмотрите возможность замены функции или лямбда ссылкой на экспортированную функцию (позиция 65:17 в исходном файле .ts), разрешение символа COMPILER_PROVIDERS в... / node_modules/@angular/compiler/src/compiler.d.ts,
Пожалуйста, оставьте свой комментарий, проголосовате здесь: