Перейти к основному содержимому

Интеграция с Angular

совет

Перед началом работы с этим руководством рекомендуется иметь базовое понимание Angular. Если нужно освежить знания, обратитесь к документации Angular.

DHTMLX Kanban отлично работает с Angular. Доступны примеры кода, показывающие, как использовать DHTMLX Kanban вместе с Angular. Подробнее смотрите в этом примере на GitHub.

Создание проекта

информация

Перед началом работы убедитесь, что у вас установлены Angular CLI и Node.js.

Чтобы создать новый проект под названием my-angular-kanban-app с помощью Angular CLI, выполните:

ng new my-angular-kanban-app
заметка

Если вы следуете этому руководству, не забудьте отключить Server-Side Rendering (SSR) и Static Site Generation (SSG/Prerendering) при создании вашего Angular-приложения!

Эта команда создаст всё необходимое, дополнительных команд не требуется.

Установка зависимостей

Перейдите в директорию вашего нового приложения:

cd my-angular-kanban-app

Далее установите зависимости и запустите сервер разработки. Для этого используйте yarn:

yarn
yarn start

Ваше приложение должно работать локально (например, по адресу http://localhost:3000).

Создание Kanban

На этом этапе потребуется получить исходный код DHTMLX Kanban. Сначала остановите приложение и установите пакет Kanban.

Шаг 1. Установка пакета

Скачайте триальную версию Kanban и следуйте инструкциям в файле README. Обратите внимание, что триальная версия действует 30 дней.

Шаг 2. Создание компонента

Далее создайте компонент Angular для добавления Kanban с Toolbar в ваше приложение. Создайте папку kanban в src/app/, затем добавьте новый файл kanban.component.ts.

Импорт исходных файлов

Откройте kanban.component.ts и импортируйте исходники Kanban. Пути импорта будут следующими:

  • Для PRO-версии, установленной из локальной папки:
import { Kanban, Toolbar } from 'dhx-kanban-package';
  • Для триальной версии:
import { Kanban, Toolbar } from '@dhx/trial-kanban';

В примерах используется триальная версия.

Задайте контейнеры и инициализируйте Kanban с Toolbar

Чтобы отобразить Kanban с Toolbar, создайте для них контейнеры и инициализируйте компоненты через их конструкторы:

kanban.component.ts
import { Kanban, Toolbar } from '@dhx/trial-kanban';
import { Component, ElementRef, OnInit, ViewChild, OnDestroy, ViewEncapsulation} from '@angular/core';

@Component({
encapsulation: ViewEncapsulation.None,
selector: "kanban", // имя шаблона, используемое в "app.component.ts" как <kanban />
styleUrls: ["./kanban.component.css"], // подключите css-файл
template: `<div class = "component_container">
<div #toolbar_container></div>
<div #kanban_container class = "widget"></div>
</div>`
})

export class KanbanComponent implements OnInit, OnDestroy {
// инициализируем контейнер для Toolbar
@ViewChild("toolbar_container", { static: true }) toolbar_container!: ElementRef;
// инициализируем контейнер для Kanban
@ViewChild("kanban_container", { static: true }) kanban_container!: ElementRef;

private _kanban!: Kanban;
private _toolbar!: Toolbar;

ngOnInit() {
// инициализация компонента Kanban
this._kanban = new Kanban(this.kanban_container.nativeElement, {});

// инициализация компонента Toolbar
this._toolbar = new Toolbar(this.toolbar_container.nativeElement, {
api: this._kanban.api,
// другие параметры конфигурации
});
}

ngOnDestroy(): void {
this._kanban.destructor(); // уничтожить Kanban
this._toolbar.destructor(); // уничтожить Toolbar
}
}

Добавление стилей

Чтобы Kanban корректно отображался, добавьте необходимые стили. Для этого создайте файл kanban.component.css в src/app/kanban/ и вставьте туда следующие стили:

kanban.component.css
/* импортируйте стили Kanban */
@import "@dhx/trial-kanban/dist/kanban.css";

/* стили для начальной страницы */
html,
body{
height: 100%;
padding: 0;
margin: 0;
}

/* стили для контейнеров Kanban и Toolbar */
.component_container {
height: 100%;
margin: 0 auto;
}

/* стили для контейнера Kanban */
.widget {
height: calc(100% - 56px);
}

Загрузка данных

Чтобы загрузить данные в Kanban, подготовьте набор данных. Создайте файл data.ts в src/app/kanban/ и добавьте туда ваши данные:

data.ts
export function getData() {
const columns = [
{
label: "Backlog",
id: "backlog"
},
{
label: "In progress",
id: "inprogress"
},
// ...
];

const cards = [
{
id: 1,
label: "Integration with Angular/React",
priority: 1,
color: "#65D3B3",
start_date: new Date("01/07/2021"),
users: [3, 2],
column: "backlog",
type: "feature",
},
{
label: "Archive the cards/boards ",
priority: 3,
color: "#58C3FE",
users: [4],
progress: 1,
column: "backlog",
type: "feature",
},
// ...
];

const rows = [
{
label: "Feature",
id: "feature",
},
{
label: "Task",
id: "task",
}
];

return { columns, cards, rows };
}

Теперь откройте kanban.component.ts. Импортируйте ваш файл с данными и передайте свойства данных в конфиг Kanban внутри метода ngOnInit() следующим образом:

kanban.component.ts
import { Kanban, Toolbar } from '@dhx/trial-kanban';
import { getData } from "./data"; // импорт данных
import { Component, ElementRef, OnInit, ViewChild, OnDestroy, ViewEncapsulation} from '@angular/core';

@Component({
encapsulation: ViewEncapsulation.None,
selector: "kanban",
styleUrls: ["./kanban.component.css"],
template: `<div class = "component_container">
<div #toolbar_container></div>
<div #kanban_container class = "widget"></div>
</div>`
})

export class KanbanComponent implements OnInit, OnDestroy {
@ViewChild("toolbar_container", { static: true }) toolbar_container!: ElementRef;
@ViewChild("kanban_container", { static: true }) kanban_container!: ElementRef;

private _kanban!: Kanban;
private _toolbar!: Toolbar;

ngOnInit() {
const { cards, columns, rows } = getData(); // инициализация свойств данных
this._kanban = new Kanban(this.kanban_container.nativeElement, {
columns, // передаем данные колонок
cards, // передаем данные карточек
rows, // передаем данные строк
rowKey: "type",
// другие параметры конфигурации
});

this._toolbar = new Toolbar(this.toolbar_container.nativeElement, {
api: this._kanban.api,
// другие параметры конфигурации
});
}

ngOnDestroy(): void {
this._kanban.destructor();
this._toolbar.destructor();
}
}

Другой способ загрузить данные в Kanban - использовать метод parse() внутри метода ngOnInit().

kanban.component.ts
import { Kanban, Toolbar } from '@dhx/trial-kanban';
import { getData } from "./data"; // импорт данных
import { Component, ElementRef, OnInit, ViewChild, OnDestroy, ViewEncapsulation} from '@angular/core';

@Component({
encapsulation: ViewEncapsulation.None,
selector: "kanban",
styleUrls: ["./kanban.component.css"],
template: `<div class = "component_container">
<div #toolbar_container></div>
<div #kanban_container class = "widget"></div>
</div>`
})

export class KanbanComponent implements OnInit, OnDestroy {
@ViewChild("toolbar_container", { static: true }) toolbar_container!: ElementRef;
@ViewChild("kanban_container", { static: true }) kanban_container!: ElementRef;

private _kanban!: Kanban;
private _toolbar!: Toolbar;

ngOnInit() {
const { cards, columns, rows } = getData(); // инициализация свойств данных
this._kanban = new Kanban(this.kanban_container.nativeElement, {
columns: [],
cards: [],
rows: [],
rowKey: "type",
// другие параметры конфигурации
});

this._toolbar = new Toolbar(this.toolbar_container.nativeElement, {
api: this._kanban.api,
// другие параметры конфигурации
});

// применяем данные через метод parse()
this._kanban.parse({
columns,
cards,
rows
});
}

ngOnDestroy(): void {
this._kanban.destructor();
this._toolbar.destructor();
}
}

Использование parse(data) позволяет перезагружать данные в любое время.

Теперь компонент Kanban готов к использованию. Как только вы добавите элемент на страницу, Kanban будет инициализирован с набором данных. Вы также можете изменить любые настройки конфигурации. Полный список доступных свойств смотрите в документации Kanban API.

Обработка событий

Когда пользователь взаимодействует с Kanban, происходит событие. Вы можете использовать эти события для отслеживания действий и запуска собственного кода. Полный список событий доступен здесь.

Откройте kanban.component.ts и обновите метод ngOnInit() так:

kanban.component.ts
// ...
ngOnInit() {
this._kanban = new Kanban(this.kanban_container.nativeElement, {});

this._kanban.api.on("add-card", (obj) => {
console.log(obj.columnId);
});
}

ngOnDestroy(): void {
this._kanban.destructor();
}

Шаг 3. Добавление Kanban в приложение

Чтобы добавить KanbanComponent в ваше приложение, откройте src/app/app.component.ts и замените стандартный код на следующий:

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

@Component({
selector: "app-root",
template: `<kanban/>`
})
export class AppComponent {
name = "";
}

Далее создайте app.module.ts в src/app/ и объявите KanbanComponent, как показано ниже:

app.module.ts
import { NgModule } from "@angular/core";
import { BrowserModule } from "@angular/platform-browser";

import { AppComponent } from "./app.component";
import { KanbanComponent } from "./kanban/kanban.component";

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

Наконец, откройте src/main.ts и вставьте следующий код:

main.ts
import { platformBrowserDynamic } from "@angular/platform-browser-dynamic";
import { AppModule } from "./app/app.module";
platformBrowserDynamic()
.bootstrapModule(AppModule)
.catch((err) => console.error(err));

Теперь вы можете запустить приложение и увидеть Kanban с загруженными данными на странице.

Kanban initialization

Это базовая схема интеграции DHTMLX Kanban с Angular. Код можно адаптировать под ваши задачи. Для более продвинутого примера смотрите GitHub.