Zum Hauptinhalt springen

Integration mit Svelte

Tipp

Stellen Sie sicher, dass Sie mit den grundlegenden Svelte-Konzepten und -Mustern vertraut sind. Zur Auffrischung lesen Sie die Svelte-Dokumentation.

DHTMLX RichText funktioniert mit Svelte. Ein vollständiges Codebeispiel finden Sie in der GitHub-Demo.

Projekt erstellen

Info

Installieren Sie Node.js und (optional) Vite, bevor Sie ein neues Projekt erstellen.

Dieses Tutorial verwendet ein Vite-basiertes Svelte-Projekt. Für SvelteKit und andere Optionen lesen Sie die Svelte-Projektanleitung.

Starten Sie ein neues Vite-Projekt:

npm create vite@latest

Abhängigkeiten installieren

Wenn der Scaffolder nach einem Projektnamen fragt, verwenden Sie my-svelte-richtext-app. Wechseln Sie dann in das neue Verzeichnis:

cd my-svelte-richtext-app

Installieren Sie die Abhängigkeiten und starten Sie den Entwicklungsserver mit einem Paketmanager.

Für yarn führen Sie aus:

yarn
yarn dev

Für npm führen Sie aus:

npm install
npm run dev

Die Anwendung läuft auf localhost (zum Beispiel http://localhost:3000).

RichText erstellen

Stoppen Sie die Anwendung und installieren Sie das RichText-Paket.

Schritt 1. Paket installieren

Laden Sie das RichText-Testpaket herunter und folgen Sie den Schritten in der README-Datei. Die Testlizenz ist 30 Tage lang gültig.

Schritt 2. Komponente erstellen

Erstellen Sie eine Svelte-Komponente, um RichText zur Anwendung hinzuzufügen. Erstellen Sie im Verzeichnis src/ eine neue Datei namens Richtext.svelte.

Quelldateien importieren

Öffnen Sie Richtext.svelte und importieren Sie die RichText-Quelldateien.

Für die PRO-Version, die aus einem lokalen Ordner installiert wurde, verwenden Sie:

Richtext.svelte
<script>
import { Richtext } from 'dhx-richtext-package';
import 'dhx-richtext-package/dist/richtext.css';
</script>

Für die Testversion verwenden Sie:

Richtext.svelte
<script>
import { Richtext } from '@dhx/trial-richtext';
import '@dhx/trial-richtext/dist/richtext.css';
</script>

Dieses Tutorial verwendet die Testversion von RichText.

Container festlegen und RichText initialisieren

Legen Sie ein Container-Element für RichText fest und initialisieren Sie die Komponente innerhalb von onMount(). Rufen Sie die Methode destructor() innerhalb von onDestroy() auf, um RichText zu entfernen:

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

let richtext_container; // Container für RichText
let editor;

onMount(() => {
// RichText-Komponente initialisieren
editor = new Richtext(richtext_container, {});
});

onDestroy(() => {
editor?.destructor(); // RichText zerstören
});
</script>

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

Stile hinzufügen

Fügen Sie die Stile für RichText und seinen Container zur CSS-Hauptdatei des Projekts hinzu (zum Beispiel src/app.css):

app.css
/* Basis-Seitenstile */
html,
body {
height: 100%;
padding: 0;
margin: 0;
}

/* RichText-Container */
.component_container {
height: 100%;
margin: 0 auto;
}

/* RichText-Widget */
.widget {
height: calc(100% - 56px);
}

Daten laden

Stellen Sie Daten für RichText bereit. Erstellen Sie die Datei data.js im Verzeichnis src/:

data.js
export function getData() {
const value = `
<h2>RichText 2.0</h2>
<p>Repository at <a href="https://git.webix.io/xbs/richtext">https://git.webix.io/xbs/richtext</a></p>
<p><img src="https://placecats.com/500/300" style={{width: '500px', height: '300px'}}></p>`;
return { value };
}

Öffnen Sie App.svelte, importieren Sie die Daten und übergeben Sie den Wert als Prop an die <RichText/>-Komponente:

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

const { value } = getData();
</script>

<RichText value={value} />

Öffnen Sie Richtext.svelte und übergeben Sie den Prop-Wert an die RichText-Konfiguration:

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

export let value;

let richtext_container;
let editor;

onMount(() => {
editor = new Richtext(richtext_container, {
value
// andere Konfigurationseigenschaften
});
});

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

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

Alternativ können Sie die Methode setValue() innerhalb von onMount() aufrufen, um Daten in RichText zu laden:

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

export let value;

let richtext_container;
let editor;

onMount(() => {
editor = new Richtext(richtext_container, {
// andere Konfigurationseigenschaften
});

editor.setValue(value);
});

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

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

Die RichText-Komponente ist einsatzbereit. Svelte rendert den Editor mit Daten, wenn das <RichText/>-Element eingebunden wird. Die vollständige Liste der Konfigurationsoptionen finden Sie in der RichText-API-Übersicht.

Events verarbeiten

RichText löst Events bei Benutzeraktionen aus. Abonnieren Sie Events mit der Methode api.on(), um auf Benutzereingaben zu reagieren. Lesen Sie die vollständige Liste der Events.

Öffnen Sie Richtext.svelte und aktualisieren Sie den onMount()-Hook. Das folgende Beispiel protokolliert eine Meldung bei jedem print-Event:

Richtext.svelte
<script>
// ...
let editor;

onMount(() => {
editor = new Richtext(richtext_container, {});

editor.api.on("print", () => {
console.log("The document is printing");
});
});

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

// ...

Starten Sie die Anwendung, um zu sehen, wie RichText mit Daten auf der Seite gerendert wird.

In einer Svelte-Anwendung gerendertes DHTMLX RichText mit Beispielinhalt

Sie haben jetzt eine funktionierende RichText-Integration in Svelte. Passen Sie den Code an Ihre Anforderungen an. Ein vollständiges Beispiel ist auf GitHub verfügbar.