Я пытаюсь настроить систему вкладок, которая позволяет компонентам регистрироваться самостоятельно (с заголовком). Первая вкладка похожа на папку «Входящие», в ней доступно множество действий / элементов ссылок для пользователей, и каждый из этих кликов должен иметь возможность создавать новый компонент по щелчку. Действия / ссылки поступают из JSON.
Созданный экземпляр компонента затем зарегистрируется как новая вкладка.
Я не уверен, что это «лучший» подход? До сих пор я видел только ориентиры для статических вкладок, которые не помогают.
Пока что у меня есть только служба вкладок, которая загружается в main и сохраняется в приложении. Это выглядит примерно так:
export interface ITab { title: string; }
@Injectable()
export class TabsService {
private tabs = new Set<ITab>();
addTab(title: string): ITab {
let tab: ITab = { title };
this.tabs.add(tab);
return tab;
}
removeTab(tab: ITab) {
this.tabs.delete(tab);
}
}
Вопросы:
- Как я могу иметь динамический список в папке «Входящие», который создает новые (разные) вкладки? Я вроде угадал,
DynamicComponentBuilder
будет ли использоваться? - Как компоненты могут быть созданы из папки «Входящие» (по щелчку), регистрироваться как вкладки и также отображаться? Я думаю
ng-content
, но я не могу найти много информации о том, как его использовать
РЕДАКТИРОВАТЬ: попытка уточнить.
Думайте о почтовом ящике как о почтовом ящике. Элементы выбираются как JSON, и он отображает несколько элементов. После щелчка по одному из элементов создается новая вкладка с этим действием действия «тип». Тип тогда является компонентом.
РЕДАКТИРОВАТЬ 2: изображение .
Ответы:
Обновить
Angular 5 StackBlitz пример
Обновить
ngComponentOutlet
был добавлен в 4.0.0-бета.3Обновить
Идет
NgComponentOutlet
работа над чем-то вроде https://github.com/angular/angular/pull/11235RC.7
Пример плунжера RC.7
Пример использования
Смотрите также angular.io ДИНАМИЧЕСКИЙ КОМПОНЕНТНЫЙ ПОГРУЗЧИК
более старые версии xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Это снова изменилось в Angular2 RC.5
Я обновлю пример ниже, но это последний день перед отпуском.
Этот пример Plunker демонстрирует, как динамически создавать компоненты в RC.5
Обновление - используйте ViewContainerRef .createComponent ()
Поскольку
DynamicComponentLoader
это устарело, подход должен быть обновлен снова.Пример плунжера
RC.4 Пример плунжера beta.17
Обновление - используйте loadNextToLocation
Пример плунжера бета.17
оригинал
Не совсем уверен по вашему вопросу, каковы ваши требования, но я думаю, что это должно делать то, что вы хотите.
Tabs
Компонент получает массив типов передаваемых и это создает «вкладку» для каждого элемента в массиве.Пример плункера бета.15 (не зависит от вашего плункера)
Существует также способ передачи данных, которые могут быть переданы динамически созданному компоненту (например
someData
, необходимо передать какtype
)Существует также некоторая поддержка использования внедрения зависимостей с общими службами.
Для получения дополнительной информации см. Https://angular.io/docs/ts/latest/cookbook/dynamic-component-loader.html.
источник
DclWrapper
создания реального экземпляра.ViewContainerRef
вместо использованияViewChild
, а затем<dcl-wrapper>
сам становится целью. Элементы добавляются как братья и сестры цели и поэтому будут вне<dcl-wrapper>
этого пути.''
(пустая строка) `и изменить конструктор наconstructor(private target:ViewContainerRef) {}
, тогда динамически добавленные компоненты станут братьями и сестрами<dcl-wrapper>
Я недостаточно крут для комментариев. Я исправил поршень из принятого ответа на работу для RC2. Ничего особенного, ссылки на CDN просто сломаны, и все.
https://plnkr.co/edit/kVJvI1vkzrLZJeRFsZuv?p=preview
источник
есть готовый к использованию компонент (совместимый с rc5) ng2-steps, который используется
Compiler
для внедрения компонента в пошаговый контейнер и службы для соединения всего вместе (синхронизация данных)источник