Estou tentando configurar um sistema de guias que permita que os componentes se registrem (com um título). A primeira guia é como uma caixa de entrada, há muitas ações / itens de link para escolher para os usuários, e cada um desses cliques deve poder instanciar um novo componente, ao clicar. As ações / links vêm do JSON.
O componente instanciado será registrado como uma nova guia.
Não tenho certeza se essa é a melhor abordagem? Até agora, os únicos guias que vi são para guias estáticas, o que não ajuda.
Até agora, só tenho o serviço de guias, que é iniciado principalmente para persistir em todo o aplicativo. Parece algo como isto:
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);
}
}
Questões:
- Como posso ter uma lista dinâmica na caixa de entrada que cria novas guias (diferentes)? Estou meio que adivinhando o
DynamicComponentBuilder
que seria usado? - Como os componentes podem ser criados a partir da caixa de entrada (no clique) se registram como guias e também são mostrados? Acho que
ng-content
sim, mas não consigo encontrar muita informação sobre como usá-lo
EDIT: Uma tentativa de esclarecer.
Pense na caixa de entrada como uma caixa de correio. Os itens são buscados como JSON e exibem vários itens. Depois que um dos itens é clicado, uma nova guia é criada com a ação desses itens 'type'. O tipo é então um componente.
EDIT 2: Imagem .
fonte
Respostas:
atualizar
Exemplo de Angular 5 StackBlitz
atualizar
ngComponentOutlet
foi adicionado ao 4.0.0-beta.3atualizar
Há um
NgComponentOutlet
trabalho em andamento que faz algo semelhante https://github.com/angular/angular/pull/11235RC.7
Exemplo de desentupidor RC.7
Exemplo de uso
Veja também angular.io CARREGADOR DINÂMICO DE COMPONENTES
versões anteriores xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Isso mudou novamente no Angular2 RC.5
Vou atualizar o exemplo abaixo, mas é o último dia antes das férias.
Este exemplo do Plunker demonstra como criar componentes dinamicamente no RC.5
Atualização - use ViewContainerRef .createComponent ()
Como
DynamicComponentLoader
foi preterido, a abordagem precisa ser atualizada novamente.Exemplo de plunker
RC.4 Exemplo de plunker beta.17
Atualização - use loadNextToLocation
Exemplo de desentupidor beta.17
original
Não tenho muita certeza da sua pergunta sobre quais são seus requisitos, mas acho que isso deve fazer o que você deseja.
O
Tabs
componente obtém uma matriz dos tipos passados e cria "guias" para cada item da matriz.Exemplo do Plunker beta.15 (não baseado no seu Plunker)
Também existe uma maneira de transmitir dados que podem ser transmitidos para o componente criado dinamicamente como (
someData
precisaria ser transmitido comotype
)Também há algum suporte para usar injeção de dependência com serviços compartilhados.
Para obter mais detalhes, consulte https://angular.io/docs/ts/latest/cookbook/dynamic-component-loader.html
fonte
DclWrapper
criar uma instância real.ViewContainerRef
vez de usarViewChild
, depois<dcl-wrapper>
se torna o alvo. Os elementos são adicionados como irmãos do destino e, portanto, ficarão fora<dcl-wrapper>
desse caminho.''
(string vazia) `e alterar o construtor paraconstructor(private target:ViewContainerRef) {}
, e os componentes adicionados dinamicamente se tornam irmãos de<dcl-wrapper>
Eu não sou legal o suficiente para comentários. Corrigi o plunker da resposta aceita para trabalhar para rc2. Nada extravagante, links para a CDN foram quebrados é tudo.
https://plnkr.co/edit/kVJvI1vkzrLZJeRFsZuv?p=preview
fonte
existe um componente pronto para uso (compatível com rc5) ng2-steps que usa
Compiler
para injetar componente no container e serviço de etapa para conectar tudo (sincronização de dados)fonte