Simplificando a Lógica de Visualização em Angular

Recentemente, tive que implementar uma visão popover com muitas variações baseadas em condições complexas. Usar ngSwitch, nesse caso, era impossível, e usar ngIfé ilegível e detalhado.

Aqui está como eu decidi abordar este problema. O primeiro passo foi criar uma diretiva chamada TemplateIdDirective:

@Directive({
  selector: 'ng-template[id]',
  standalone: true
})
export class TemplateIdDirective {
  @Input() id: string;
  
  tpl = inject(TemplateRef);
}

<-- trace-information.component.html -->

<div>
  <p>{{ header }}</p>
  <ng-template [ngTemplateOutlet]="body"></ng-template>
</div>

<ng-template id="variation-one">...</ng-template>
<ng-template id="variation-two">...</ng-template>
<ng-template id="variation-three">...</ng-template>
<ng-template id="variation-four">...</ng-template>
<ng-template id="variation-five">...</ng-template>

@Component({
  selector: 'app-trace-information',
  standalone: true,
  imports: [TemplateIdDirective],
  templateUrl: './trace-information.component.html'
})
export class TraceInformationComponent {
  header = '';

  @Input() traceInfo: TraceInfo;
  
  @ViewChildren(TemplateIdDirective) 
  templates: QueryList<TemplateIdDirective>;
  
  private cdr = inject(ChangeDetectorRef);

  ngAfterViewInit() {
    this.resolveView();
  }
 
  private resolveView() {
    // All the complex conditions are defined here.
    // In real life is way more complicated than that.
    // This is only for illustration
    if(...) {
      this.header = '...';
      this.body = this.getTemplate('variation-one');
    } else if(...) {
       if(...) {
         this.header = '...';
         this.body = this.getTemplate('variation-two'); 
       } else {
         this.header = '...';
         this.body = this.getTemplate('variation-three');
       }
    }

    this.cdr.detectChanges();
  }


  private getTemplate(id: string) {
    return this.templates.find((tpl) => tpl.id === id).tpl;
  }
}

Siga-me no Medium ou Twitter para ler mais sobre Angular e JS!

Suggested posts

A revolução sem código: liberando a prosperidade dos negócios com Webflow, Framer, Bubble.io,

A revolução sem código: liberando a prosperidade dos negócios com Webflow, Framer, Bubble.io,

Embarque em uma emocionante jornada de inovação e sucesso enquanto explora o potencial inexplorado dessas surpreendentes plataformas sem código. Deixe-me compartilhar uma história com você sobre Sapna, uma notável empresária.

Meus recursos de codificação mais usados

Meus recursos de codificação mais usados

Esta semana, recebi um e-mail de um membro da lista de e-mails diários. Eles queriam saber: quais recursos você visita diariamente, semanalmente e mensalmente? Ótima pergunta! Fico feliz em tentar compartilhar algumas ideias sobre meu fluxo de trabalho e os principais recursos que uso.

Related posts

Rede de TV Twitter

Rede de TV Twitter

O que é velho agora é novo de novo e o que costumava ser a coisa brilhante e brilhante agora parece opaco. Não estou falando de jeans JNCO fazendo um retorno entre os garotos legais do centro da cidade junto com outras modas do final dos anos 1990.

Coletando OSINT para caçar ameaças

Coletando OSINT para caçar ameaças

Olá, entusiastas cibernéticos! Bem-vindo de volta ao OSINT para a série de caça a ameaças. No primeiro artigo, apresentei uma visão geral do OSINT e sua importância na caça às ameaças.

pronomes são super assustadores

Isso me atinge De repente, como tantas vezes acontece É o meio do caminho tudo de novo <Não, não aquele no Pacífico, seu marrom, aquele no carnaval> Todas as manchetes em voz alta…..

Financiando a remoção de carbono no FY24

A divisão das solicitações de apropriações da Carbon180 em todos os caminhos

Financiando a remoção de carbono no FY24

Por Alyson Lee, consultor administrativo de assuntos governamentais O processo de apropriações anuais do governo federal é fundamental para nossos esforços para financiar a remoção de dióxido de carbono (CDR). Todos os anos, a Carbon180 envia solicitações a vários escritórios do Congresso para ajudar a orientar para onde os dólares do próximo ano irão fluir.