Zum Hauptinhalt springen

dhtmlxGantt mit Angular

Hinweis

Dieses Tutorial zeigt, wie man das JS DHTMLX Gantt direkt in einer Angular-App ohne das offizielle Wrapper verwendet.

Wenn Sie Angular-Eingaben/Ausgaben, wrapper-gesteuerte Synchronisation und Angular-Template-Komponente-Unterstützung benötigen, verwenden Sie stattdessen Angular Gantt.

Sie sollten mit grundlegenden Angular-Konzepten (Komponenten, Lifecycle-Hooks, Services) vertraut sein. Wenn nicht, beginnen Sie mit der Angular-Dokumentation.

DHTMLX Gantt ist mit Angular kompatibel. Sie können das zugehörige Demo-Repository auf GitHub prüfen: DHTMLX Gantt with Angular Demo.

Creating A Project

Erstellen eines Projekts

Bevor Sie beginnen, installieren Sie Node.js und Angular CLI.

Erstellen Sie eine neue Angular-Anwendung:

ng new my-angular-gantt-app --standalone --routing=false --style=css
cd my-angular-gantt-app

Starten Sie die App einmal, um zu prüfen, ob das Projekt funktioniert:

  • npm: npm start
  • yarn: yarn start
  • oder CLI: ng serve

Die App sollte unter http://localhost:4200 erreichbar sein.

Creating Gantt

Gantt erstellen

Stoppen Sie den Dev-Server (Ctrl+C) bevor Sie das Gantt-Paket installieren.

Step 1. Package Installation

Schritt 1. Paketinstallation

Professionelle Builds der JS Gantt-Bibliothek sind über private npm verfügbar. Folgen Sie der Installationsanleitung, um Zugriff zu erhalten.

Evaluations-Build (öffentliches Paket für Tutorials):

  • npm:
npm install @dhx/trial-gantt
  • yarn:
yarn add @dhx/trial-gantt

Professioneller Build (privates npm):

  • npm:
npm install @dhx/gantt
  • yarn:
yarn add @dhx/gantt

Sie können Gantt auch aus einem lokalen Ordner installieren, weil das Paket als npm-Modul strukturiert ist.

Step 2. Create A Gantt Component

Schritt 2. Eine Gantt-Komponente erstellen

Erstellen Sie eine neue Komponente für die direkte JS-Gantt-Integration:

ng generate component gantt --skip-tests

Import Gantt Source Files

Importieren der Gantt-Quelldateien

Öffnen Sie src/app/gantt/gantt.component.ts und importieren Sie das Gantt-Paket.

Wenn Sie den Evaluations-Build installiert haben:

src/app/gantt/gantt.component.ts
import { Gantt, type GanttStatic } from '@dhx/trial-gantt';

Wenn Sie den professionellen Build installiert haben:

src/app/gantt/gantt.component.ts
import { Gantt, type GanttStatic } from '@dhx/gantt';

Fügen Sie Gantt-Stile in src/app/gantt/gantt.component.css hinzu.

Evaluations-Build:

src/app/gantt/gantt.component.css
@import "@dhx/trial-gantt/codebase/dhtmlxgantt.css";

Professioneller Build:

src/app/gantt/gantt.component.css
@import "@dhx/gantt/dist/dhtmlxgantt.css";

Initialize Gantt In Angular Lifecycle Hooks

Gantt in Angular-Lebenszyklus-Hooks initialisieren

Ersetzen Sie src/app/gantt/gantt.component.ts durch eine minimale direkte Integration:

src/app/gantt/gantt.component.ts
import { AfterViewInit, Component, ElementRef, OnDestroy, ViewChild, ViewEncapsulation } from '@angular/core';
import { Gantt, type GanttStatic } from '@dhx/trial-gantt';

@Component({
selector: 'app-gantt',
standalone: true,
template: `<div #ganttHost className="gantt-chart"></div>`,
styleUrl: './gantt.component.css',
encapsulation: ViewEncapsulation.None,
})
export class GanttComponent implements AfterViewInit, OnDestroy {
@ViewChild('ganttHost', { static: true }) ganttHost!: ElementRef<HTMLElement>;

private gantt: GanttStatic | null = null;

ngAfterViewInit(): void {
const gantt = Gantt.getGanttInstance();
gantt.init(this.ganttHost.nativeElement);
this.gantt = gantt;
}

ngOnDestroy(): void {
this.gantt?.destructor();
this.gantt = null;
}
}

Fügen Sie dem Container-Größenangaben in src/app/gantt/gantt.component.css hinzu:

src/app/gantt/gantt.component.css
@import "@dhx/trial-gantt/codebase/dhtmlxgantt.css";

.gantt-chart {
width: 100%;
height: 600px;
}

Step 3. Add Gantt To The App

Schritt 3. Gantt in die App einbinden

Ersetzen Sie src/app/app.component.ts, damit die App Ihre Gantt-Komponente rendert:

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

@Component({
selector: 'app-root',
standalone: true,
imports: [GanttComponent],
template: `<app-gantt></app-gantt>`,
})
export class AppComponent {}

Nach dem Start der App sollten Sie ein leeres Gantt-Diagramm sehen.

Step 4. Provide Data

Schritt 4. Daten bereitstellen

Erstellen Sie src/app/demo-data.ts mit einem kleinen Datensatz:

src/app/demo-data.ts
export function getData() {
return {
data: [
{
id: 10,
text: 'Project #1',
start_date: '2026-02-02 00:00',
duration: 6,
progress: 0.4,
open: true,
},
{
id: 1,
text: 'Task #1',
start_date: '2026-02-02 00:00',
duration: 2,
progress: 0.6,
parent: 10,
},
{
id: 2,
text: 'Task #2',
start_date: '2026-02-04 00:00',
duration: 3,
progress: 0.2,
parent: 10,
},
],
links: [{ id: 1, source: 1, target: 2, type: '0' }],
};
}

Importieren Sie nun die Daten und parsen Sie sie in GanttComponent:

src/app/gantt/gantt.component.ts
import { getData } from '../demo-data';

// ...inside ngAfterViewInit()
const gantt = Gantt.getGanttInstance();
gantt.config.date_format = '%Y-%m-%d %H:%i';
gantt.init(this.ganttHost.nativeElement);
gantt.parse(getData());
this.gantt = gantt;

Wenn Sie die App neu laden, sollten Sie ein Gantt-Diagramm mit Aufgaben und einer Verknüpfung sehen.

Step 5. Save Data

Schritt 5. Daten speichern

Um Änderungen zu erfassen, die im Diagramm vorgenommen wurden, verwenden Sie einen dataProcessor. Er kann Änderungen an Ihr Backend senden oder sie einfach protokollieren, während Sie die Integration aufbauen.

src/app/gantt/gantt.component.ts
// ...inside ngAfterViewInit(), after gantt.init(...)
gantt.createDataProcessor((entity, action, data, id) => {
console.log('[dp]', entity, action, data, id);
});

DHTMLX Gantt akzeptiert Promise-Antworten von dataProcessor-Handlern. Falls Ihr Backend IDs bei der Erstellung ändert, geben Sie ein Objekt wie { id: newId } oder { tid: newId } zurück, damit Gantt den Datensatz neu abbilden kann.

Siehe server-side integration für vollständige Backend-Muster.

XSS, CSRF Und SQL-Injection-Angriffe

XSS-, CSRF- und SQL-Injection-Angriffe

Gantt schützt Ihre Anwendung nicht vor Backend-Sicherheitsproblemen (SQL-Injection, XSS, CSRF). Backend-Validierung, Autorisierung und Ausgabensanitisierung bleiben Ihre Verantwortung.

Lesen Sie Anwendungssicherheit für die wichtigsten Risikobereiche und Hinweise zur Minderung.

Need help?
Got a question about the documentation? Reach out to our technical support team for help and guidance. For custom component solutions, visit the Services page.