Bunte Tastatur
Dennis, Kiya | 25.01.2024

Angular: Gebundene Eingaben für Routen

Webentwicklung > Angular: Gebundene Eingaben für Routen

Mit der Einführung von Angular 16 erleben wir eine deutliche Verbesserung, wenn es darum geht, Informationen aus Angular-Routen in Komponenten einzufügen. Es ist nun möglich, Daten direkt an @Input Dekoratoren von Komponenten zu binden, was eine elegantere und effizientere Methode der Datenübertragung darstellt.

Betrachten wir zunächst die konventionelle Methode:

1const routes: Route[] = [
2// weitere Routen
3  {
4    path: 'details/:id',
5    loadComponent: () =>
6      import('./blog-details.component').then((c) => c.BlogDetails),
7    data: {
8      admin: true,
9    },
10  },
11];
12
13@Component({
14  selector: 'blog-details',
15  template: `
16  <ng-container *ngIf="vm$ | async as vm"><p> with active route {{ vm.id }} {{ vm.admin | json }} </p></ng-container>
17  `,
18  styles: [],
19  standalone: true,
20  imports: [NgIf, AsyncPipe],
21  changeDetection: ChangeDetectionStrategy.OnPush,
22})
23export class BlogDetails {
24  activatedRoute = inject(ActivatedRoute);
25
26  id$ = this.activatedRoute.params.pipe(map((params) => params['id']));
27
28  idData$ = this.activatedRoute.data;
29
30  vm$ = combineLatest([this.id$, this.idData$]).pipe(
31    map(([id, idData]) => ({ id, admin: idData.admin }))
32  );
33}

Bei dieser älteren Methode war es erforderlich, ActivatedRoute zu injecten und die Parameter sowie das Datenattribut aus der Route mühsam auszulesen.

Schauen wir uns nun die neue und verbesserte Methode an:

Die Datei main.ts muss leicht angepasst werden, um die neue Option withComponentInputBinding im Router zu aktivieren:

1bootstrapApplication(App, {
2  providers: [provideRouter(routes, withComponentInputBinding())],
3});

Dann können die Routeninformationen über @Input Dekoratoren direkt an die Komponenten übergeben werden:

1@Component({
2  selector: 'blog-details',
3  template: `<p>with component input binding: {{ id }} {{ admin | json }} </p>`,
4  styles: [],
5  standalone: true,
6  imports: [NgIf, JsonPipe],
7  changeDetection: ChangeDetectionStrategy.OnPush,
8})
9export class BlogDetails {
10  @Input() id!: string;
11
12  @Input() admin!: boolean;
13}

Diese Methode vereinfacht die Datenbindung und macht den Code sauberer und leichter zu pflegen. Ein praktisches Beispiel hierfür findest du auf Stackblitz.

Weitere Informationen:

Inhalt
  • Was ist die herkömmliche Methode für die Eingabebindung in Angular?
  • Wie hat Angular 16 das Routing von Eingabebindungen verbessert?
  • Wie verwendet man @Input-Dekoratoren für die Datenbindung von Komponenten?
Dennis Hundertmark
Dennis (Softwareentwickler)

Als Frontend-Experte und Angular-Enthusiast gestalte ich Webanwendungen, die Technik und Design gekonnt zusammenführen. Meine Stärke liegt in der Entwicklung benutzerzentrierter Lösungen, die sowohl f... mehr anzeigen

Gitlab
Kiya

... ist unsere engagierte und leidenschaftliche Künstliche Intelligenz und Expertin für Softwareentwicklung. Mit einem unermüdlichen Interesse für technologische Innovationen bringt sie Enthusiasmus u... mehr anzeigen

More about this topic

More from Dennis

Unsere Entwicklungsexpertise

Standort Hannover

newcubator GmbH
Bödekerstraße 22
30161 Hannover

Standort Dortmund

newcubator GmbH
Westenhellweg 85-89
44137 Dortmund