DEV Community

Marco
Marco

Posted on • Originally published at blog.disane.dev

Angular: Framework für Single Page Applications🌐

Entdecke Angular, das leistungsstarke Framework von Google, ideal für dynamische Webanwendungen. Erfahre mehr über Komponenten, Datenbindung und Routing! 🌐


Angular ist eines der beliebtesten Frameworks für die Entwicklung von dynamischen und reaktiven Webanwendungen. Entwickelt und gepflegt von Google, bietet Angular eine robuste Plattform, die Entwicklern die Werkzeuge zur Verfügung stellt, um leistungsstarke Single-Page-Applications (SPAs) zu erstellen. In diesem Artikel werde ich dich durch die Grundlagen von Angular führen, seine wichtigsten Merkmale und wie es sich im Vergleich zu anderen Frameworks behauptet.

Was ist Angular? 🤔

Angular ist ein TypeScript-basiertes Open-Source-Web-Application-Framework, das von Google entwickelt und gepflegt wird. Es wurde erstmals 2010 als "AngularJS" veröffentlicht und hat seitdem eine umfassende Überarbeitung erfahren, die zur modernen Version "Angular" führte, die 2016 eingeführt wurde.

AngularPreview imageThe web development framework for building modern apps.

Hauptmerkmale von Angular:

  • TypeScript: Angular verwendet TypeScript, ein Superset von JavaScript, das statische Typisierung und fortschrittliche Features bietet.
  • Modularität: Angular Anwendungen sind modular aufgebaut, was die Wiederverwendbarkeit von Code und eine bessere Strukturierung der Anwendungen ermöglicht.
  • Komponentenbasiert: Angular setzt stark auf Komponenten, die wiederverwendbare UI-Bausteine darstellen.
  • Zwei-Wege-Datenbindung: Diese Funktion ermöglicht eine automatische Synchronisation zwischen dem Modell und der Ansicht.
  • Dependency Injection: Angular verfügt über einen eingebauten Mechanismus zur Verwaltung von Abhängigkeiten, was die Modularität und Testbarkeit des Codes verbessert.

Warum Angular für große Projekte ideal ist 🚀

Angular ist eines der umfassendsten und robustesten Frameworks, die für die Webentwicklung zur Verfügung stehen. Es wurde von Google entwickelt und bietet eine vollständige Lösung für die Erstellung von großen, komplexen und skalierbaren Webanwendungen. In diesem Artikel erläutern wir, warum Angular besonders gut für große Projekte geeignet ist und welche Vorteile es bietet.

💡 Wir selbst nutzen für unsere Business Anwendung auf in der Firma auch seit ca. 2018 Angular und fahren damit sehr sehr gut. Updates gehen recht schnell, selbst Breaking Changes sind gut migrierbar. Viele Dinge übernimmt Anngular auch schon automatisch durch eine Migration. Der Upgrade-Guide zeigt auch immer sehr klar auf, wann was für welche Versionen zutun sind. Besser geht's nun wirklich nicht.

AngularPreview imageThe web development framework for building modern apps.

Vorteile von Angular für große Projekte

  1. Modularität und Struktur: Angular ermöglicht eine klare Modularisierung des Codes. Jede Funktionalität kann in Module unterteilt werden, was die Wartung und Erweiterung der Anwendung erleichtert. Dies ist besonders wichtig für große Projekte, wo eine gut organisierte Struktur unerlässlich ist.
  2. TypeScript: Angular wird mit TypeScript geschrieben, einem statisch typisierten Superset von JavaScript. TypeScript verbessert die Codequalität durch frühzeitige Fehlererkennung während der Entwicklungsphase und macht den Code leichter verständlich und wartbar.
  3. Zwei-Wege-Datenbindung: Die Zwei-Wege-Datenbindung in Angular ermöglicht eine automatische Synchronisation zwischen Modell und Ansicht. Dies erleichtert die Verwaltung des Anwendungszustands und reduziert den Boilerplate-Code, was wiederum die Entwicklung beschleunigt.
  4. Umfangreiche Bibliotheken und Tools: Angular bietet eine Vielzahl an eingebauten Werkzeugen und Bibliotheken, wie Angular CLI, Angular Universal für Server-Side Rendering und RxJS für reaktive Programmierung. Diese Tools unterstützen Entwickler dabei, effizient zu arbeiten und komplexe Anforderungen zu erfüllen.
  5. Dependency Injection (DI): Angular verfügt über ein leistungsstarkes DI-System, das die Verwaltung von Abhängigkeiten vereinfacht und die Testbarkeit des Codes verbessert. Dies ist besonders nützlich für große Anwendungen, in denen die Wiederverwendbarkeit und Testbarkeit des Codes von großer Bedeutung sind.
  6. Aktive Community und Unterstützung durch Google: Die aktive Community und die Unterstützung durch Google garantieren eine kontinuierliche Weiterentwicklung und Wartung des Frameworks. Dies ist ein entscheidender Vorteil für Unternehmen, die langfristige Projekte planen.

Anwendungsbeispiele

Viele große Unternehmen und Organisationen nutzen Angular für ihre umfangreichen Webanwendungen. Beispiele sind:

  • Google: Viele interne Tools und Dashboards bei Google werden mit Angular entwickelt.
  • Microsoft Office Online: Die Webversion von Microsoft Office nutzt Angular für eine performante und interaktive Benutzererfahrung.
  • Gartner: Das führende Forschungs- und Beratungsunternehmen verwendet Angular für seine umfangreichen Analyse- und Berichtsplattformen.

Installation und erstes Projekt 🚀

Um mit Angular zu beginnen, musst du Node.js und npm (Node Package Manager) auf deinem System installiert haben. Danach kannst du das Angular CLI (Command Line Interface) installieren, das die Erstellung und Verwaltung von Angular-Projekten vereinfacht.

Installation des Angular CLI:

npm install -g @angular/cli

Enter fullscreen mode Exit fullscreen mode

Erstellung eines neuen Projekts:

ng new mein-erstes-angular-projekt
cd mein-erstes-angular-projekt
ng serve

Enter fullscreen mode Exit fullscreen mode

Diese Befehle erstellen ein neues Angular-Projekt und starten einen Entwicklungsserver, auf den du unter http://localhost:4200 zugreifen kannst.

Grundkonzepte von Angular 🧩

Komponenten in Angular

In Angular dreht sich alles um Komponenten. Eine Komponente besteht aus drei Hauptteilen:

  • Template: Das HTML, das die Ansicht der Komponente definiert.
  • Styles: Das CSS, das das Styling der Komponente definiert.
  • Class: Das TypeScript, das die Logik der Komponente definiert.

Ein einfaches Beispiel einer Angular-Komponente könnte so aussehen:

import { Component } from '@angular/core';

@Component({
  selector: 'app-meine-komponente',
  template: `
    <h1>Hallo, Welt!</h1>
    <p>Willkommen zu meiner ersten Angular-Komponente.</p>
  `,
  styles: [`
    h1 {
      color: blue;
    }
  `]
})
export class MeineKomponente {}

Enter fullscreen mode Exit fullscreen mode

In diesem Beispiel definieren wir eine Komponente mit dem Selector app-meine-komponente, einem einfachen HTML-Template und ein wenig CSS.

Module in Angular

Ein Angular-Modul ist eine Klasse, die mit einem @NgModule Dekorator versehen ist. Module dienen dazu, verwandte Code-Bestandteile zu gruppieren und die Anwendung in logische Einheiten zu unterteilen.

import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { AppComponent } from './app.component';
import { MeineKomponente } from './meine-komponente/meine-komponente.component';

@NgModule({
  declarations: [
    AppComponent,
    MeineKomponente
  ],
  imports: [
    BrowserModule
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }

Enter fullscreen mode Exit fullscreen mode

Das AppModule ist das Hauptmodul der Anwendung und bootstrappt die AppComponent.

Dependency Injection in Angular 💉

Dependency Injection (DI) ist ein Designmuster, das die Abhängigkeiten eines Objekts (z.B. einer Komponente) zur Laufzeit bereitstellt, anstatt sie im Code hart zu kodieren. Angular verfügt über einen eingebauten DI-Mechanismus, der es einfach macht, Services und andere Abhängigkeiten zu verwalten.

Beispiel eines einfachen Services:

import { Injectable } from '@angular/core';

@Injectable({
  providedIn: 'root',
})
export class DatenService {
  private daten: string[] = ['Daten 1', 'Daten 2', 'Daten 3'];

  getDaten() {
    return this.daten;
  }
}

Enter fullscreen mode Exit fullscreen mode

Verwendung des Services in einer Komponente:

import { Component, OnInit } from '@angular/core';
import { DatenService } from './daten.service';

@Component({
  selector: 'app-meine-komponente',
  template: `
    <ul>
      <li *ngFor="let datum of daten">{{ datum }}</li>
    </ul>
  `
})
export class MeineKomponente implements OnInit {
  daten: string[];

  constructor(private datenService: DatenService) {}

  ngOnInit() {
    this.daten = this.datenService.getDaten();
  }
}

Enter fullscreen mode Exit fullscreen mode

Routing in Angular 🗺️

Angular bietet ein leistungsstarkes Routing-Modul, das die Navigation innerhalb der Anwendung ermöglicht.

Ein einfaches Routing-Beispiel:

// app-routing.module.ts
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { HomeComponent } from './home/home.component';
import { AboutComponent } from './about/about.component';

const routes: Routes = [
  { path: '', component: HomeComponent },
  { path: 'about', component: AboutComponent },
];

@NgModule({
  imports: [RouterModule.forRoot(routes)],
  exports: [RouterModule]
})
export class AppRoutingModule { }

Enter fullscreen mode Exit fullscreen mode

In diesem Beispiel definieren wir zwei Routen: Eine für die Startseite (HomeComponent) und eine für die Über-Seite (AboutComponent). Diese Routen können dann in der Anwendung genutzt werden, um zwischen verschiedenen Ansichten zu navigieren.

Guards in Angular 🛡️

Routing Guards sind spezielle Services, die verwendet werden, um die Navigation zu schützen und zu steuern. Sie können beispielsweise verwendet werden, um den Zugriff auf bestimmte Routen zu beschränken, wenn der Benutzer nicht authentifiziert ist.

Beispiel eines AuthGuard:

import { Injectable } from '@angular/core';
import { CanActivate, Router } from '@angular/router';

@Injectable({
  providedIn: 'root',
})
export class AuthGuard implements CanActivate {
  constructor(private router: Router) {}

  canActivate(): boolean {
    const isAuthenticated = // ... Logik zur Überprüfung der Authentifizierung
    if (!isAuthenticated) {
      this.router.navigate(['/login']);
      return false;
    }
    return true;
  }
}

Enter fullscreen mode Exit fullscreen mode

Verwendung des Guards im Routing:

// app-routing.module.ts
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { HomeComponent } from './home/home.component';
import { AboutComponent } from './about/about.component';
import { AuthGuard } from './auth.guard';

const routes: Routes = [
  { path: '', component: HomeComponent },
  { path: 'about', component: AboutComponent, canActivate: [AuthGuard] },
];

@NgModule({
  imports: [RouterModule.forRoot(routes)],
  exports: [RouterModule]
})
export class AppRoutingModule { }

Enter fullscreen mode Exit fullscreen mode

Services in Angular 🛠️

Services in Angular sind Klassen, die Daten und Geschäftslogik kapseln. Sie werden in der Regel verwendet, um Daten aus einer API zu holen, gemeinsam genutzte Funktionen bereitzustellen oder Zustände zu verwalten.

Beispiel eines einfachen Services zur Datenabfrage:

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs';

@Injectable({
  providedIn: 'root',
})
export class ApiService {
  private apiUrl = 'https://api.example.com/daten';

  constructor(private http: HttpClient) {}

  getDaten(): Observable<any> {
    return this.http.get<any>(this.apiUrl);
  }
}

Enter fullscreen mode Exit fullscreen mode

Angular Forms 📋

Angular bietet zwei verschiedene Ansätze zur Erstellung von Formularen: Template-Driven Forms und Reactive Forms. Beide Ansätze haben ihre eigenen Stärken und eignen sich für unterschiedliche Anwendungsfälle.

Template-Driven Forms

Template-Driven Forms verwenden Angular-Direktiven in den HTML-Templates, um Formulare zu erstellen. Sie sind einfach und deklarativ, was sie ideal für kleinere und weniger komplexe Formulare macht. Template-Driven Forms sind besonders nützlich, wenn du schnell ein einfaches Formular erstellen möchtest, ohne viel Code schreiben zu müssen.

// app.component.ts
import { Component } from '@angular/core';

@Component({
  selector: 'app-root',
  template: `
    <form #form="ngForm" (ngSubmit)="onSubmit(form.value)">
      <input name="name" ngModel>
      <button type="submit">Senden</button>
    </form>
  `,
})
export class AppComponent {
  onSubmit(formValue: any) {
    console.log(formValue);
  }
}

Enter fullscreen mode Exit fullscreen mode

Vorteile:

  • Einfach zu erstellen und zu verstehen.
  • Wenig Boilerplate-Code.
  • Ideal für einfache und weniger komplexe Formulare.

Reactive Forms:

Reactive Forms sind stärker konfigurierbar und bieten mehr Kontrolle über die Validierung und den Status des Formulars. Sie verwenden ein reaktives API und sind besonders nützlich für komplexe Formulare mit dynamischem Verhalten. Reactive Forms ermöglichen eine klarere und testbarere Struktur, was sie ideal für größere und geschäftskritische Anwendungen macht.

// app.component.ts
import { Component, OnInit } from '@angular/core';
import { FormBuilder, FormGroup } from '@angular/forms';

@Component({
  selector: 'app-root',
  template: `
    <form [formGroup]="form" (ngSubmit)="onSubmit()">
      <input formControlName="name">
      <button type="submit">Senden</button>
    </form>
  `,
})
export class AppComponent implements OnInit {
  form: FormGroup;

  constructor(private fb: FormBuilder) {}

  ngOnInit() {
    this.form = this.fb.group({
      name: ['']
    });
  }

  onSubmit() {
    console.log(this.form.value);
  }
}

Enter fullscreen mode Exit fullscreen mode

Vorteile:

  • Bietet mehr Kontrolle und Flexibilität.
  • Besser für komplexe und dynamische Formulare.
  • Einfacher zu testen und zu warten.

Wann welchen Ansatz verwenden?

  • Template-Driven Forms sind ideal für einfache und kleinere Formulare, bei denen du schnell eine Lösung benötigst und wenig zusätzlichen Code schreiben möchtest.
  • Reactive Forms sind die bessere Wahl für größere, komplexe Formulare, die dynamisches Verhalten und umfangreiche Validierungslogik erfordern. Sie bieten mehr Kontrolle und sind besser testbar.

Die Wahl zwischen Template-Driven Forms und Reactive Forms hängt also von den Anforderungen deines Projekts ab. Beide Ansätze sind leistungsfähig und können je nach Kontext und Komplexität des Formulars verwendet werden.

WebComponents und Standalone 🌐

Angular bietet die Möglichkeit, WebComponents zu erstellen und als Standalone-Komponenten zu verwenden. Diese Flexibilität erweitert die Einsatzmöglichkeiten von Angular erheblich und ermöglicht es Entwicklern, wiederverwendbare und unabhängige Komponenten zu erstellen, die in verschiedenen Projekten und Frameworks genutzt werden können. In diesem Artikel erklären wir, wie Angular für WebComponents und Standalone-Komponenten genutzt werden kann.

WebComponents mit Angular

WebComponents sind wiederverwendbare, gekapselte und eigenständige UI-Komponenten, die in jedem Webprojekt verwendet werden können, unabhängig vom Framework.

Vorteile von WebComponents:

  • Wiederverwendbarkeit: Einmal erstellte WebComponents können in verschiedenen Projekten wiederverwendet werden.
  • Framework-unabhängig: WebComponents funktionieren unabhängig vom verwendeten Framework und können in verschiedenen Umgebungen integriert werden.
  • Kapselung: WebComponents kapseln ihre Struktur, ihr Styling und ihr Verhalten, wodurch sie isoliert und vor Seiteneffekten geschützt sind.

Erstellung eines WebComponents mit Angular:

Angular bietet die Möglichkeit, WebComponents zu erstellen, indem Angular-Elemente verwendet werden. Hier ein einfaches Beispiel:

import { Injector, NgModule } from '@angular/core';
import { createCustomElement } from '@angular/elements';
import { BrowserModule } from '@angular/platform-browser';
import { MyComponent } from './my-component/my-component.component';

@NgModule({
  declarations: [MyComponent],
  imports: [BrowserModule],
  entryComponents: [MyComponent]
})
export class AppModule {
  constructor(private injector: Injector) {}

  ngDoBootstrap() {
    const el = createCustomElement(MyComponent, { injector: this.injector });
    customElements.define('my-component', el);
  }
}

Enter fullscreen mode Exit fullscreen mode

Dieses Beispiel zeigt, wie man eine Angular-Komponente in ein WebComponent umwandelt, das in jedem HTML-Dokument verwendet werden kann.

Standalone-Komponenten in Angular

Standalone-Komponenten sind eine neue Funktion in Angular, die es ermöglicht, Komponenten ohne die Abhängigkeit von einem Modul zu erstellen. Dies erleichtert die Erstellung und Verwendung von Komponenten erheblich, insbesondere in kleineren Projekten oder bei der Migration von bestehenden Projekten.

Vorteile von Standalone-Komponenten:

  • Einfachheit: Weniger Boilerplate-Code und einfachere Strukturierung der Anwendung.
  • Flexibilität: Standalone-Komponenten können unabhängig von anderen Modulen verwendet werden.
  • Schnellere Entwicklung: Reduziert die Komplexität und beschleunigt den Entwicklungsprozess.

Erstellung einer Standalone-Komponente:

Hier ein einfaches Beispiel für eine Standalone-Komponente:

import { Component } from '@angular/core';

@Component({
  selector: 'my-standalone-component',
  template: `<h1>Hallo, Standalone-Komponente!</h1>`,
  standalone: true
})
export class MyStandaloneComponent {}

Enter fullscreen mode Exit fullscreen mode

Diese Komponente kann direkt verwendet werden, ohne dass sie in ein Modul importiert werden muss.

Vergleich mit anderen Frameworks 🥇

Angular steht im Wettbewerb mit anderen beliebten Frontend-Frameworks wie React und Vue.js. Jeder dieser Ansätze hat seine eigenen Stärken und Schwächen:

  • React: Ein von Facebook entwickeltes Framework, das sich auf eine komponentenbasierte Architektur konzentriert. React ist flexibel, erfordert jedoch oft zusätzliche Bibliotheken für State-Management und Routing.
  • Vue.js: Ein progressives Framework, das sich leicht in bestehende Projekte integrieren lässt. Vue ist einfach zu erlernen und bietet eine reaktive Datenbindung ähnlich wie Angular.

Warum Angular wählen?

  • Komplettlösung: Angular bietet eine umfassende Lösung mit eingebauten Werkzeugen für Routing, Formulare, HTTP-Anfragen und mehr.
  • Unterstützung durch Google: Die Unterstützung durch ein großes Unternehmen wie Google garantiert eine kontinuierliche Weiterentwicklung und Unterstützung.
  • TypeScript: Die Verwendung von TypeScript verbessert die Entwicklerproduktivität und Codequalität durch statische Typprüfung.

Fazit 📃

Angular ist ein leistungsstarkes Framework, das viele Werkzeuge und Funktionen bietet, um die Entwicklung von dynamischen und reaktiven Webanwendungen zu erleichtern. Durch seine komponentenbasierte Architektur, Zwei-Wege-Datenbindung und robusten Werkzeuge für Routing und State-Management ist Angular eine ausgezeichnete Wahl für Entwickler, die komplexe Anwendungen erstellen möchten.

Ich hoffe, dieser Artikel hat dir einen guten Überblick über Angular gegeben und dich dazu inspiriert, es in deinem nächsten Projekt auszuprobieren. Wenn du Fragen oder Anmerkungen hast, hinterlasse gerne einen Kommentar!


If you like my posts, it would be nice if you follow my Blog for more tech stuff.

Top comments (0)