Kürzlich musste ich eine Popover- Ansicht mit vielen Variationen basierend auf komplexen Bedingungen implementieren. Die Verwendung ngSwitchwar in diesem Fall unmöglich und die Verwendung ngIfist unleserlich und ausführlich.
So habe ich beschlossen, dieses Problem anzugehen. Der erste Schritt bestand darin, eine Direktive mit dem Namen zu erstellen 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;
}
}
Folgen Sie mir auf Medium oder Twitter, um mehr über Angular und JS zu erfahren!
Begeben Sie sich auf eine spannende Reise voller Innovation und Erfolg und erschließen Sie das ungenutzte Potenzial dieser überraschenden No-Code-Plattformen. Lassen Sie mich eine Geschichte über Sapna erzählen, eine bemerkenswerte Unternehmerin.
Diese Woche erhielt ich eine E-Mail von einem Mitglied der täglichen E-Mail-Liste. Sie wollten wissen: Welche Ressourcen besuchen Sie täglich, wöchentlich und monatlich? Tolle Frage! Ich versuche gerne, einige Einblicke in meinen Arbeitsablauf und die wichtigsten Ressourcen, die ich verwende, mit Ihnen zu teilen.
Wenn Sie eine Anfrage an facebook.com stellen, sucht Ihr Computer nach dem Domänennamen, um diesen in eine IP-Adresse zu übersetzen, damit Ihr Computer diese Verbindung herstellen kann.
Der Juckreiz in meiner Hand breitete sich aus, als ich mit dem örtlichen Buchhändler um ein weiteres Buch verhandelte. Dieses Buch würde wie die anderen, die ich kürzlich gekauft habe, seinen Thron auf meinem Stapel „To Be Read“ (TBR) finden; und trotzdem habe ich es gekauft.
Der Wechsel in eine neue Karriere kann eine große Herausforderung sein, wenn man es alleine versucht. Es ist wichtig, Verantwortungspartner zu finden, die sich auf dem gleichen Lernniveau wie Sie befinden und ähnliche Ziele, Hartnäckigkeit und Tatendrang haben.
Was alt ist, ist jetzt wieder neu und was früher das glitzernde, glänzende Ding war, fühlt sich jetzt langweilig an. Ich spreche nicht davon, dass JNCO-Jeans zusammen mit anderen Modetrends der späten 1990er Jahre unter den coolen Kids in der Innenstadt ein Comeback erleben.