Zum Hauptinhalt springen

Integration mit Svelte

Tipp

Grundkenntnisse der Konzepte und Muster von Svelte werden vorausgesetzt. Zur Auffrischung lesen Sie die Svelte-Dokumentation.

DHTMLX Pivot lässt sich als reguläre Komponente in Svelte integrieren. Ein vollständiges, funktionsfähiges Setup finden Sie in der Svelte Pivot-Demo auf GitHub.

Projekt erstellen

Info

Installieren Sie Node.js bevor Sie beginnen. Vite ist optional.

Der folgende Befehl führt das Vite-Projektgerüst-Tool aus und ermöglicht die Auswahl einer Svelte-Vorlage:

npm create vite@latest

Benennen Sie das Projekt my-svelte-pivot-app.

Abhängigkeiten installieren

Wechseln Sie in das neu erstellte Projektverzeichnis:

cd my-svelte-pivot-app

Installieren Sie die Abhängigkeiten und starten Sie den Entwicklungsserver mit Ihrem Paketmanager:

yarn 
yarn start # oder: yarn dev
npm install
npm run dev

Die App sollte auf einem lokalen Port laufen (zum Beispiel http://localhost:3000).

Pivot erstellen

Fügen Sie das Pivot-Paket zum Projekt hinzu und binden Sie Pivot anschließend in eine Svelte-Komponente ein.

Schritt 1. Paket installieren

Laden Sie das Test-Pivot-Paket herunter und folgen Sie den Schritten in der README-Datei. Das Test-Pivot-Paket ist 30 Tage gültig.

Schritt 2. Komponente erstellen

Erstellen Sie eine Svelte-Komponente, die Pivot einbindet. Fügen Sie eine neue Datei src/Pivot.svelte hinzu.

Quelldateien importieren

Öffnen Sie src/Pivot.svelte und importieren Sie die Pivot-Quelldateien. Die Import-Pfade hängen von der Paketversion ab:

  • PRO-Version (aus einem lokalen Ordner installiert):
Pivot.svelte
<script>
import { Pivot } from 'dhx-pivot-package';
import 'dhx-pivot-package/dist/pivot.css';
</script>

Wenn das Paket minimierte Assets enthält, importieren Sie pivot.min.css anstelle von pivot.css.

  • Testversion:
Pivot.svelte
<script>
import { Pivot } from '@dhx/trial-pivot';
import '@dhx/trial-pivot/dist/pivot.css';
</script>

Dieses Tutorial verwendet die Testversion von Pivot.

Container einrichten und Pivot einbinden

Um Pivot auf der Seite anzuzeigen, fügen Sie ein Container-div hinzu und initialisieren Sie Pivot dann im onMount-Lifecycle-Hook mithilfe des Konstruktors. Zerstören Sie Pivot im onDestroy-Hook.

Der folgende Code-Ausschnitt definiert eine minimale Pivot-Svelte-Komponente:

Pivot.svelte
<script>
import { onMount, onDestroy } from "svelte";
import { Pivot } from "@dhx/trial-pivot";
import "@dhx/trial-pivot/dist/pivot.css";

let container; // Container-Referenz für Pivot
let table;

onMount(() => {
// Pivot-Komponente initialisieren
table = new Pivot(container, {});
});

onDestroy(() => {
table.destructor(); // Pivot beim Unmount zerstören
});
</script>

<div bind:this={container} class="widget"></div>

Styles hinzufügen

Damit Pivot korrekt gerendert wird, fügen Sie die folgenden Styles zur CSS-Hauptdatei des Projekts hinzu:

main.css
/* Styles für die Startseite */
html,
body,
#app { /* #app-Root-Container verwenden */
height: 100%;
padding: 0;
margin: 0;
}

/* Styles für den Pivot-Container */
.widget {
height: 100%;
width: 100%;
}

Daten laden

Um Pivot mit Daten zu versorgen, bereiten Sie einen Datensatz vor. Erstellen Sie src/data.js und exportieren Sie die Daten und Feld-Metadaten:

data.js
export function getData() {
const dataset = [
{
"cogs": 51,
"date": "10/1/2018",
"inventory_margin": 503,
"margin": 71,
"market_size": "Major Market",
"market": "Central",
"marketing": 46,
"product_line": "Leaves",
"product_type": "Herbal Tea",
"product": "Lemon",
"profit": -5,
"sales": 122,
"state": "Colorado",
"expenses": 76,
"type": "Decaf"
},
{
"cogs": 52,
"date": "10/1/2018",
"inventory_margin": 405,
"margin": 71,
"market_size": "Major Market",
"market": "Central",
"marketing": 17,
"product_line": "Leaves",
"product_type": "Herbal Tea",
"product": "Mint",
"profit": 26,
"sales": 123,
"state": "Colorado",
"expenses": 45,
"type": "Decaf"
}, // weitere Datensätze
];

const fields = [
{
"id": "cogs",
"label": "Cogs",
"type": "number"
},
{
"id": "date",
"label": "Date",
"type": "date"
}, // weitere Felder
];

return { dataset, fields };
};

Öffnen Sie src/App.svelte, importieren Sie die Daten und übergeben Sie sie als Props an die neue <Pivot/>-Komponente:

App.svelte
<script>
import Pivot from "./Pivot.svelte";
import { getData } from "./data.js";

const { fields, dataset } = getData();
</script>

<Pivot fields={fields} dataset={dataset} />

Öffnen Sie src/Pivot.svelte, deklarieren Sie die eingehenden Props mit export let und wenden Sie sie auf das Pivot-Konfigurationsobjekt an:

Pivot.svelte
<script>
import { onMount, onDestroy } from "svelte";
import { Pivot } from "@dhx/trial-pivot";
import "@dhx/trial-pivot/dist/pivot.css";

export let fields;
export let dataset;

let container;
let table;

onMount(() => {
table = new Pivot(container, {
fields,
data: dataset,
config: {
rows: ["state", "product_type"],
columns: ["product_line", "type"],
values: [
{
field: "profit",
method: "sum"
}, // weitere Werte
]
},
// weitere Konfigurationseigenschaften
});
});

onDestroy(() => {
table.destructor();
});
</script>

<div bind:this={container} class="widget"></div>

Die Komponente ist nun einsatzbereit. Beim Einbinden rendert Pivot mit den übergebenen Daten. Die vollständige Liste der Konfigurationseigenschaften finden Sie in der Pivot-API-Dokumentation.

Events behandeln

Benutzeraktionen in Pivot lösen Events aus, die Sie abonnieren können. Die vollständige Liste der Events finden Sie in der Übersicht der Events.

Der folgende Code-Ausschnitt erweitert onMount um einen open-filter-Event-Listener, der die Feld-ID protokolliert, wenn ein Benutzer einen Filter öffnet:

Pivot.svelte
<script>
// ...
let table;

onMount(() => {
table = new Pivot(container, {
fields,
data: dataset,
config: {
rows: ["state", "product_type"],
columns: ["product_line", "type"],
values: [
{
field: "profit",
method: "sum"
}, // weitere Werte
]
},
// weitere Konfigurationseigenschaften
});

table.api.on("open-filter", (ev) => {
console.log("Die Feld-ID, für die der Filter aktiviert wurde:", ev.id);
});
});

onDestroy(() => {
table.destructor();
});
</script>

// ...

Starten Sie die App, um zu sehen, wie Pivot die Daten auf der Seite rendert.

In einer Svelte-Anwendung gerendertes DHTMLX Pivot mit Beispieldaten

Pivot ist nun in Svelte integriert. Passen Sie die Konfiguration an die Anforderungen Ihres Projekts an. Das vollständige Beispiel finden Sie in der svelte-pivot-demo auf GitHub.