@duoduo-oba/ng-devui
Version:
DevUI components based on Angular
113 lines (112 loc) • 4.2 kB
TypeScript
import { ElementRef, EventEmitter, Renderer2, OnInit, AfterViewInit, OnDestroy, NgZone } from '@angular/core';
import { DropEvent } from '../shared/drop-event.model';
import { DragDropService } from '../services/drag-drop.service';
import { Subject } from 'rxjs';
import { DragPlaceholderInsertionEvent } from './placeholder-insertion-event.type';
export declare type DropIndexFlag = 'beforeAll' | 'afterAll';
export declare class DroppableDirective implements OnInit, AfterViewInit, OnDestroy {
protected el: ElementRef;
private renderer;
private dragDropService;
private ngZone;
/**
* Event fired when Drag dragged element enters a valid drop target.
*/
dragEnterEvent: EventEmitter<any>;
/**
* Event fired when an element is being dragged over a valid drop target
*/
dragOverEvent: EventEmitter<any>;
/**
* Event fired when a dragged element leaves a valid drop target.
*/
dragLeaveEvent: EventEmitter<any>;
/**
* Event fired when an element is dropped on a valid drop target.
*/
dropEvent: EventEmitter<DropEvent>;
/**
* CSS class applied on the draggable that is applied when the item is being dragged.
*/
dragOverClass: string;
/**
* Defines compatible drag drop pairs. Values must match both in draggable and droppable.dropScope.
*/
dropScope: string | Array<string>;
placeholderTag: string;
placeholderStyle: any;
/**
* 设置placeholder的提示性文字,仅支持文本(安全起见)
*/
placeholderText: string;
/**
* 用于允许拖动到元素上,方便树形结构的拖动可以成为元素的子节点
*/
allowDropOnItem: boolean;
/**
* allowDropOnItem为true时,才有效,用于允许拖动到元素上后,被命中的元素增加样式
*/
dragOverItemClass: string;
/**
* 用于修正有内嵌列表后,父项高度被撑大,此处height,width为父项自己的高度(用于纵向拖动),宽度(用于横向拖动)
* */
nestingTargetRect: {
height?: number;
width?: number;
};
/**
* 是否启用越过立即交换位置的算法, 不能与allowDropOnItem一起用,allowDropOnItem为true时,此规则无效
* */
switchWhileCrossEdge: boolean;
/**
* sortable的情况下,拖动到可以drop但不在sortContainer里的时候默认drop的位置
* */
defaultDropPosition: 'closest' | 'before' | 'after';
/**
* sortable的情况下,列表如果使用了virtual scroll等部分加载技术时候返回正确的dropIndex
* */
dropSortCountSelector: string;
dropSortVirtualScrollOption: {
totalLength?: number;
startIndex?: number;
};
private dropFlag;
private sortContainer;
private sortDirection;
private sortDirectionZMode;
private placeholder;
private dragCount;
private dropIndex;
private dragStartSubscription;
private dragEndSubscription;
private dropEndSubscription;
private overElement;
private dragPartEventSub;
private allowDropCache;
private dragElIndex;
placeholderInsertionEvent: Subject<DragPlaceholderInsertionEvent>;
placeholderRenderEvent: Subject<any>;
constructor(el: ElementRef, renderer: Renderer2, dragDropService: DragDropService, ngZone: NgZone);
ngOnInit(): void;
ngAfterViewInit(): void;
ngOnDestroy(): void;
dragEnter(e: any): void;
dragOver(e: any): void;
dragLeave(e: any): void;
drop(e: any): void;
allowDrop(e: any): boolean;
private dropSortCountSelectorFilterFn;
private findSortableEl;
private calcPosition;
private calcPositionOutside;
setPlaceholder: () => void;
private insertPlaceholder;
private isDragPlaceholderPosition;
private hitDragOriginPlaceholder;
private removePlaceholder;
private removeDragoverItemClass;
private checkSelfFromIndex;
private getRealIndex;
getBoundingRectAndRealPosition(targetElement: any): any;
getSortContainer(): any;
}