Интеграция с Angular
Убедитесь, что вы знакомы с основными концепциями и паттернами Angular. Для повторения см. документацию Angular.
DHTMLX RichText работает с Angular. Полный пример кода доступен в демо на GitHub.
Создание проекта
Перед созданием нового проекта установите Angular CLI и Node.js.
Создайте новый проект my-angular-richtext-app с помощью Angular CLI:
ng new my-angular-richtext-app
Отключите Server-Side Rendering (SSR) и Static Site Generation (SSG/Prerendering), когда Angular CLI запросит выбор в процессе создания проекта.
Команда устанавливает все необходимые инструменты. Никаких дополнительных команд не требуется.
Установка зависимостей
Перейдите в директорию нового приложения:
cd my-angular-richtext-app
Установите зависимости и запустите сервер разработки с помощью пакетного менеджера yarn:
yarn
yarn start
Приложение запускается на localhost (например, http://localhost:3000).
Создание RichText
Остановите приложение и установите пакет RichText.
Шаг 1. Установка пакета
Загрузите ознакомительный пакет RichText и следуйте инструкциям в файле README. Ознакомительная лицензия действительна 30 дней.
Шаг 2. Создание компонента
Создайте Angular-компонент для добавления RichText в приложение. В директории src/app/ создайте папку richtext и добавьте новый файл richtext.component.ts.
Импорт исходных файлов
Откройте richtext.component.ts и импортируйте исходные файлы RichText.
Для PRO-версии, установленной из локальной папки, используйте:
import { Richtext } from 'dhx-richtext-package';
Для ознакомительной версии используйте:
import { Richtext } from '@dhx/trial-richtext';
В этом руководстве используется ознакомительная версия RichText.
Задание контейнера и инициализация RichText
Задайте контейнерный элемент для RichText и инициализируйте компонент с помощью конструктора Richtext внутри ngOnInit(). Вызовите метод destructor() внутри ngOnDestroy() для освобождения ресурсов:
import { Richtext } from '@dhx/trial-richtext';
import { Component, ElementRef, OnInit, ViewChild, OnDestroy, ViewEncapsulation } from '@angular/core';
@Component({
encapsulation: ViewEncapsulation.None,
selector: "richtext", // использовать селектор "richtext" в app.component.ts как <richtext />
styleUrls: ["./richtext.component.css"], // подключить css-файл
template: `<div class = "component_container">
<div #richtext_container class = "widget"></div>
</div>`
})
export class RichTextComponent implements OnInit, OnDestroy {
// контейнер для RichText
@ViewChild("richtext_container", { static: true }) richtext_container!: ElementRef;
private _editor!: Richtext;
ngOnInit() {
// инициализировать ком понент RichText
this._editor = new Richtext(this.richtext_container.nativeElement, {});
}
ngOnDestroy(): void {
this._editor.destructor(); // уничтожить RichText
}
}
Добавление стилей
Создайте файл richtext.component.css в директории src/app/richtext/ со стилями для RichText и его контейнера:
/* импортировать стили RichText */
@import "@dhx/trial-richtext/dist/richtext.css";
/* базовые стили страницы */
html,
body{
height: 100%;
padding: 0;
margin: 0;
}
/* контейнер RichText */
.component_container {
height: 100%;
margin: 0 auto;
}
/* виджет RichText */
.widget {
height: calc(100% - 56px);
}
Загрузка данных
Подготовьте данные для RichText. Создайте файл data.ts в директории src/app/richtext/:
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 };
}
Откройте richtext.component.ts. Импортируйте данные и передайте свойство value в конфигурацию RichText внутри ngOnInit():
import { Richtext } from '@dhx/trial-richtext';
import { getData } from "./data"; // импортировать данные
import { Component, ElementRef, OnInit, ViewChild, OnDestroy, ViewEncapsulation } from '@angular/core';
@Component({
encapsulation: ViewEncapsulation.None,
selector: "richtext",
styleUrls: ["./richtext.component.css"],
template: `<div class = "component_container">
<div #richtext_container class = "widget"></div>
</div>`
})
export class RichTextComponent implements OnInit, OnDestroy {
@ViewChild("richtext_container", { static: true }) richtext_container!: ElementRef;
private _editor!: Richtext;
ngOnInit() {
const { value } = getData(); // извлечь значение из модуля данных
this._editor = new Richtext(this.richtext_container.nativeElement, {
value
// другие параметры конфигурации
});
}
ngOnDestroy(): void {
this._editor.destructor();
}
}
Также можно вызвать метод setValue() внутри ngOnInit() для загрузки данных в RichText:
import { Richtext } from '@dhx/trial-richtext';
import { getData } from "./data"; // импортировать данные
import { Component, ElementRef, OnInit, ViewChild, OnDestroy, ViewEncapsulation } from '@angular/core';
@Component({
encapsulation: ViewEncapsulation.None,
selector: "richtext",
styleUrls: ["./richtext.component.css"],
template: `<div class = "component_container">
<div #richtext_container class = "widget"></div>
</div>`
})
export class RichTextComponent implements OnInit, OnDestroy {
@ViewChild("richtext_container", { static: true }) richtext_container!: ElementRef;
private _editor!: Richtext;
ngOnInit() {
const { value } = getData(); // извлечь значение из модуля данных
this._editor = new Richtext(this.richtext_container.nativeElement, {
// другие параметры конфигурации
});
// применить данные через метод setValue()
this._editor.setValue(value);
}
ngOnDestroy(): void {
this._editor.destructor();
}
}
Компонент RichText готов к использованию. Angular отображает редактор с данными при монтировании элемента <richtext/>. Полный список параметров конфигурации см. в обзоре API RichText.
Обработка событий
RichText генерирует события при действиях пользователя. Подпишитесь на событ ия с помощью метода api.on(), чтобы реагировать на ввод пользователя. См. полный список событий.
Откройте richtext.component.ts и обновите метод ngOnInit(). В приведённом примере в консоль выводится сообщение при каждом событии print:
// ...
ngOnInit() {
this._editor = new Richtext(this.richtext_container.nativeElement, {});
this._editor.api.on("print", () => {
console.log("The document is printing");
});
}
ngOnDestroy(): void {
this._editor.destructor();
}
Шаг 3. Добавление RichText в приложение
Откройте src/app/app.component.ts и замените код по умолчанию селектором <richtext/>:
import { Component } from "@angular/core";
@Component({
selector: "app-root",
template: `<richtext/>`
})
export class AppComponent {
name = "";
}
Создайте src/app/app.module.ts и объявите RichTextComponent:
import { NgModule } from "@angular/core";
import { BrowserModule } from "@angular/platform-browser";
import { AppComponent } from "./app.component";
import { RichTextComponent } from "./richtext/richtext.component";
@NgModule({
declarations: [AppComponent, RichTextComponent],
imports: [BrowserModule],
bootstrap: [AppComponent]
})
export class AppModule {}
Откройте src/main.ts и замените содержимое кодом начальной загрузки:
import { platformBrowserDynamic } from "@angular/platform-browser-dynamic";
import { AppModule } from "./app/app.module";
platformBrowserDynamic()
.bootstrapModule(AppModule)
.catch((err) => console.error(err));
Запустите приложение, чтобы увидеть RichText с данными на странице.

Теперь у вас есть работающая интеграция RichText с Angular. Настройте код под свои нужды. Полный пример доступен на GitHub.