Menyederhanakan View Logic di Angular
Mar 02 2023
Baru-baru ini, saya harus mengimplementasikan tampilan popover dengan banyak variasi berdasarkan kondisi yang kompleks. Menggunakan ngSwitch, dalam hal ini, tidak mungkin, dan menggunakan ngIf tidak dapat dibaca dan bertele-tele.
Baru-baru ini, saya harus mengimplementasikan tampilan popover dengan banyak variasi berdasarkan kondisi yang kompleks. Menggunakan ngSwitch, dalam hal ini, tidak mungkin, dan menggunakan ngIftidak dapat dibaca dan bertele-tele.
Inilah cara saya memutuskan untuk mendekati masalah ini. Langkah pertama adalah membuat direktif bernama 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;
}
}
Ikuti saya di Medium atau Twitter untuk membaca lebih lanjut tentang Angular dan JS!
Jana Duggar: Semua yang Dia Katakan Tentang Cinta dan Jendela 5 Tahunnya untuk Menemukan 'Yang Satu'

![Apa itu Linked List? [Bagian 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































