File

projects/rebirth-ng/src/lib/draggable/draggable.directive.ts

Metadata

selector [reDraggable]

Index

Properties
Inputs
Outputs
HostListeners

Inputs

disabled

Default value: false

dragData

Type: any

dragEffect

Type: "none" | "copy" | "copyLink" | "copyMove" | "link" | "linkMove" | "move" | "all" | "uninitialized"

Default value: 'copy'

reDraggable

Type: string

Outputs

onDragEnd $event type: EventEmitter<any>
onDragging $event type: EventEmitter<any>
onDragStart $event type: EventEmitter<any>

HostListeners

drag
Arguments : '$event'
drag($event: )
dragend
Arguments : '$event'
dragend($event: )
dragstart
Arguments : '$event'
dragstart($event: )
mouseleave
Arguments : '$event'
mouseleave(event: )
mouseover
Arguments : '$event'
mouseover(event: )

Properties

Static DRAGGABLE_DATA_KEY
DRAGGABLE_DATA_KEY: string
Type : string
Default value : 'text'
draggableHandle
draggableHandle: DraggableHandleDirective
Type : DraggableHandleDirective
Decorators : ContentChild
handle
handle: any
Type : any
import { HostListener, EventEmitter, Output, Input, Directive, ContentChild, ElementRef } from '@angular/core';


@Directive({
  selector: '[reDraggableHandle]'
})
export class DraggableHandleDirective {
  constructor(public elementRef: ElementRef) {
  }
}

@Directive({
  selector: '[reDraggable]',
  host: {
    '[draggable]': '!disabled'
  }
})
export class DraggableDirective {
  static DRAGGABLE_DATA_KEY = 'text';
  @Input() disabled = false;
  @Input('reDraggable') group: string;
  @Input() dragData: any;
  // https://developer.mozilla.org/zh-CN/docs/Web/API/DataTransfer/effectAllowed
  @Input() dragEffect: 'none' | 'copy' | 'copyLink' | 'copyMove' | 'link' | 'linkMove' | 'move'
    | 'all' | 'uninitialized' = 'copy';

  @Output() onDragStart: EventEmitter<any> = new EventEmitter();
  @Output() onDragEnd: EventEmitter<any> = new EventEmitter();
  @Output() onDragging: EventEmitter<any> = new EventEmitter();
  handle: any;
  @ContentChild(DraggableHandleDirective) draggableHandle: DraggableHandleDirective;

  @HostListener('dragstart', ['$event'])
  dragStart($event) {
    if (!this.draggableHandle || this.draggableHandle.elementRef.nativeElement === this.handle) {
      $event.stopPropagation();
      $event.dataTransfer.effectAllowed = this.dragEffect;
      $event.dataTransfer.setData(DraggableDirective.DRAGGABLE_DATA_KEY, JSON.stringify({
        group: this.group,
        data: this.dragData
      }));
      this.onDragStart.emit($event);
      return;
    }
    $event.preventDefault();
  }

  @HostListener('drag', ['$event'])
  drag($event) {
    this.onDragging.emit($event);
  }

  @HostListener('dragend', ['$event'])
  dragEnd($event) {
    this.onDragEnd.emit($event);
  }

  @HostListener('mouseover', ['$event'])
  mouseover(event) {
    this.handle = event.target;
  }

  @HostListener('mouseleave', ['$event'])
  mouseleave(event) {
    this.handle = null;
  }

}

results matching ""

    No results matching ""