События перетаскивания Angular PrimeNG
Angular PrimeNG — это библиотека компонентов пользовательского интерфейса для приложений Angular. Он предлагает множество готовых тем и компонентов пользовательского интерфейса для различных задач, таких как ввод, меню, диаграммы, кнопки и т. д. В этой статье мы рассмотрим события перетаскивания Angular PrimeNG.
Директивы перетаскивания (pDraggable и pDroppable) используются для применения поведения перетаскивания к любому элементу. Три события перетаскивания перечислены ниже.
Перетаскиваемые события Angular PrimeNG:
- onDragStart: это событие принимает обратный вызов, который запускается, когда начинается перетаскивание.
- onDrag: это событие принимает обратный вызов, который вызывается при перетаскивании.
- onDragEnd: это событие принимает обратный вызов, который запускается, когда перетаскивание заканчивается.
Выпадающие события Angular PrimeNG:
- onDrop: это событие запускается, когда перетаскиваемый элемент помещается в область, которую можно перетаскивать.
- onDragEnter: это событие запускается, когда перетаскиваемый элемент входит в область сбрасываемого объекта.
- onDragLeave: это событие запускается, когда перетаскиваемый элемент покидает область, которую можно перетаскивать.
Синтаксис:
// For Droppable
<div
pDroppable="..."
(event-name)="callback()">
...
</div>Создание приложения Angular и установка модуля:
Шаг 1: Создайте приложение Angular, используя следующую команду.
ng new appname
Шаг 2: После создания папки проекта, т. е. имени приложения, перейдите к ней с помощью следующей команды.
cd appname
Шаг 3: Наконец, установите PrimeNG в указанный вами каталог.
npm install primeng --save npm install primeicons --save
Структура проекта: Структура проекта будет выглядеть следующим образом после выполнения вышеуказанных шагов:
Пример 1. В приведенном ниже примере показано использование перетаскиваемых событий и отображение всплывающего сообщения в правом верхнем углу при возникновении любого из событий.
- приложение.component.html:
HTML
<h1 style="color:green"> GeeksforGeeks</h1><h3> Angular PrimeNG Drag and Drop Drop Events</h3> <div class="grid"> <div class="col-12 md:col-6"> <p-table [value]="available" responsiveLayout="scroll"> <ng-template pTemplate="header"> <tr> <th>Name</th> <th>Age</th> </tr> </ng-template> <ng-template pTemplate="body" let-person> <tr pDraggable="products" (onDragStart)="dragStart(person);" (onDrag)="drag()" (onDragEnd)="dragEnd()"> <td>{{person.name}}</td> <td>{{person.age}}</td> </tr> </ng-template> </p-table> </div> <div class="col-12 md:col-6" pDroppable="products" (onDrop)="drop()" responsiveLayout="scroll"> <p-table [value]="selected"> <ng-template pTemplate="header"> <tr> <th>Name</th> <th>Age</th> </tr> </ng-template> <ng-template pTemplate="body" let-person> <tr> <td>{{person.name}}</td> <td>{{person.age}}</td> </tr> </ng-template> </p-table> </div></div><p-toast [preventOpenDuplicates]="true"></p-toast> |
- app.component.ts:
Javascript
import { Component } from "@angular/core";import { MessageService } from "primeng/api"; interface Person { id: String; name: String, age: number,} @Component({ selector: "app-root", templateUrl: "./app.component.html", styleUrls: ["./app.component.css"], providers: [MessageService]})export class AppComponent { constructor(private msg: MessageService){} available: Person[] = []; selected: Person[] = []; currentlyDragging: Person | null = null; ngOnInit() { this.available = [ { id: "ASDF12", name: "Anshu", age: 19 }, { id: "KJHY45", name: "Shikhar", age: 22 }, { id: "LKIO34", name: "Jayant", age: 32 }, { id: "LPOI21", name: "Krishna", age: 23 }, { id: "VANI12", name: "Vanishka", age: 20 } ]; } // On Drag Start dragStart(person: Person) { this.currentlyDragging = person; // Show the toast message on the frontend this.msg.add({ severity: "info", summary: "Drag Started", detail: "onDragStart Event" }) } drag() { // Show the toast message on the frontend this.msg.add({ severity: "success", summary: "Dragging...", detail: "onDrag Event" }) } // On Drag End dragEnd() { this.currentlyDragging = null; // Show the toast message on the frontend this.msg.add({ severity: "error", summary: "Drag End", detail: "onDragEnd Event" }) } // On Drop of Item to droppable area drop() { if (this.currentlyDragging) { let currentlyDraggingIndex = this.findIndex(this.currentlyDragging); this.selected = [...this.selected, this.currentlyDragging]; this.available = this.available.filter((val, i) => i != currentlyDraggingIndex); this.currentlyDragging = null; } } // Find the Index of a Person findIndex(person: Person) { let index = -1; for (let i = 0; i < this.available.length; i++) { if (person.id === this.available[i].id) { index = i; break; } } return index; }} |
- app.module.ts:
Javascript
import { NgModule } from "@angular/core";import { BrowserModule } from "@angular/platform-browser";import { HttpClientModule } from "@angular/common/http";import { BrowserAnimationsModule } from "@angular/platform-browser/animations";import { AppComponent } from "./app.component";import { FormsModule } from "@angular/forms";import { TableModule } from "primeng/table";import { ToastModule } from "primeng/toast";import { DragDropModule } from "primeng/dragdrop"; @NgModule({ imports: [ BrowserModule, BrowserAnimationsModule, HttpClientModule, FormsModule, TableModule, ToastModule, DragDropModule ], declarations: [AppComponent], bootstrap: [AppComponent]})export class AppModule { } |
Выход:
Пример 2. В этом примере мы использовали удаляемые события, чтобы уведомить пользователя о них с помощью всплывающих сообщений.
- приложение.component.html:
HTML
<h1 style="color:green"> GeeksforGeeks</h1><h3> Angular PrimeNG Drag and Drop Drop Events</h3> <div class="grid"> <div class="col-12 md:col-6"> <p-table [value]="available" responsiveLayout="scroll"> <ng-template pTemplate="header"> <tr> <th>Name</th> <th>Age</th> </tr> </ng-template> <ng-template pTemplate="body" let-person> <tr pDraggable="products" (onDragStart)="dragStart(person);" (onDragEnd)="dragEnd()"> <td>{{person.name}}</td> <td>{{person.age}}</td> </tr> </ng-template> </p-table> </div> <div class="col-12 md:col-6" pDroppable="products" (onDrop)="drop()" (onDragEnter)="dragEnter()" (onDragLeave)="dragLeave()" responsiveLayout="scroll"> <p-table [value]="selected"> <ng-template pTemplate="header"> <tr> <th>Name</th> <th>Age</th> </tr> </ng-template> <ng-template pTemplate="body" let-person> <tr> <td>{{person.name}}</td> <td>{{person.age}}</td> </tr> </ng-template> </p-table> </div></div><p-toast [preventOpenDuplicates]="true"></p-toast> |
- app.component.ts: