加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Angular2拖放目标

发布时间:2020-12-17 17:16:23 所属栏目:安全 来源:网络整理
导读:我正在我的angular2应用程序中实现一个拖放功能,就像这样…用户可以看到他们可以选择的选项列表和列表上方的放置区域 – 当他们从其中一个选项拖动到放下区域然后处理事件. 到目前为止,我有一个可拖动的指令来处理拖动启动事件,并在事件的dataTransfer属性上
我正在我的angular2应用程序中实现一个拖放功能,就像这样…用户可以看到他们可以选择的选项列表和列表上方的放置区域 – 当他们从其中一个选项拖动到放下区域然后处理事件.

到目前为止,我有一个可拖动的指令来处理拖动启动事件,并在事件的dataTransfer属性上设置一些数据.我试图做的是创建另一个指令,它是一个dropTarget指令,它只处理drop事件并获取数据.

这是可以做的吗?我是否可以更好地为可拖动的div和drop区域使用相同的指令,并插入一些逻辑,只允许在div放在右侧目标上时发生drop事件.

谢谢

编辑:代码

这是我的draggable指令的代码:

import {Directive,ElementRef} from '@angular/core';

@Directive({
    selector: '[myDraggable]',host: {
        '(dragstart)': 'onDragStart($event)','(dragover)': 'onDragOver($event)','(dragleave)': 'onDragLeave($event)','(dragenter)': 'onDragEnter($event)','(drop)': 'onDrop($event)'
    }
})
export class DraggableDirective {

    constructor(el: ElementRef) {
        el.nativeElement.setAttribute('draggable','true');
    }

    onDragStart(ev: DragEvent) {
        console.log("Drag Started");
        ev.dataTransfer.setData('Text','Data from drag start');
    }

}

这是拖动目标指令代码:

import {Directive,ElementRef} from '@angular/core';

@Directive({
    selector: '[dragTarget]',host: {
        '(dragover)': 'onDragOver($event)'
    }
})
export class DragTargetDirective {

    onDragOver(ev: DragEvent) {
        console.log("dragged over target" + ev.dataTransfer.getData('Text'));
    }

}

最后这里是包含两个指令的html

<div class="relativeContainer">
    <div class="absoluteBox" *ngFor="let process of processes" [ngClass]="{'active': process.active}">
    <div class="process-title">{{process.stage}} - {{process.name}}</div>
    <div dragTarget *ngIf="process.options" class="process-selection">{{process.options[process.selectedOption]}}</div>
    <ul class="option-list">
        <li myDraggable *ngFor="let option of process.options" class="option-item"><p>{{option}}</p></li>
    </ul>
</div>

我还有组件的元数据,其中导入和声明了指令

import {DraggableDirective,DragTargetDirective} from '../draggable';

@Component({
    templateUrl: 'app/dashboard/dashboard.component.html',styleUrls: [require('./dashboard.component.scss')],directives: [DraggableDirective,DragTargetDirective]
})

解决方法

以为我会来完成这个问题 – 我使用了错误的事件处理函数 – 尝试从dragover上的事件中获取数据是我不打算做的事情.

ondrop函数是正确使用的函数,并且正是我期望的那样.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读