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

Angular 2 – 拖放回调函数

发布时间:2020-12-17 17:09:36 所属栏目:安全 来源:网络整理
导读:Plunker: https://plnkr.co/edit/uZ8mvu6a1LXAsBBY3Shd?p=preview 在顶部我有’小部件’:’文字’和’文字b’,你可以拖放. 在小部件下面,你已经有了两行内部小部件. 我有一个 阻拦容器 块行(蓝色背景) 块列(粉红色背景) 块(红色背景) 基本上就像一个Bootst
Plunker: https://plnkr.co/edit/uZ8mvu6a1LXAsBBY3Shd?p=preview

在顶部我有’小部件’:’文字’和’文字b’,你可以拖放.

在小部件下面,你已经有了两行内部小部件.
我有一个

>阻拦容器

>块行(蓝色背景)

>块列(粉红色背景)

>块(红色背景)

基本上就像一个Bootstrap网格.

1)当我将’text a’小部件拖到红色块上时,小部件被添加但我没有得到回调’onDragEnter’函数调用.我只得到console.log onDropSuccess.

当我将小部件拖到容器,行,列和块上时,我希望得到一个回调,以便我可以添加逻辑.

我尝试添加我的功能,但不起作用,无法弄清楚错误在哪里.

我希望有些人可以帮助解决这个问题.

//Drag functions

        drop(item){
            alert('dropped')
            console.log('dropping event',item)
                var target = item.mouseEvent.target,index;

                if(target.classList.contains('row')) {
                    index = target.getAttribute('data-index');
                }

                if(target.classList.contains('item') && target.parentNode.classList.contains('row')) {
                    index = target.parentNode.getAttribute('data-index');
                }

                if(index) {
                    console.log(this.containers);
                    console.log(this.containers[index]);
                    this.containers[index].widgets.push( item.dragData);
                } else {
                    this.containers.push([ item.dragData]);
                }
         }
         onDropSuccess(widget: any,event: any,objecType: string) {
            console.log('dropped on ',objecType)
            if( objecType == 'row'){
                console.log('dropped on',objecType)
            }
            else if(objecType == 'block'){
                console.log('dropped on ',objecType)
            }
            this.dragOperation = false;
            console.log('onDropSuccess x',widget,event);

            console.log('containers',this.containers)
         }

         onDragStart(widget: any,event: any) {
            console.log('onDragStart',event);
         }

         onDragEnter(widget: any,event: any) {
            alert('entered ')
            console.log('onDragEnter',event);
            console.log('drag enter containers',this.containers)
         }

           chicken(event) {
            console.log('onDragEnter chicken',event);

         }

         onDragSuccess(widget: any,event: any) {
            console.log('onDragSuccess',event);
         }

         onDragOver(widget: any,event: any) {
            console.log('onDragOver',event);
         }

         onDragEnd(widget: any,event);
         }
         onDragLeave(widget: any,event: any) {
            console.log('onDragLeave',event);
         }

         onMouseDown(){
            this.dragOperation = true;
            console.log('mouse down');
         }

         onMouseUp(event: any){
            console.log(event);
            this.dragOperation = false;
         }

解决方法

你需要做的是在你的html中为你的项添加两件事.

首先是这个

(dragover)="$event.preventDefault()"

它会做什么,这使得它允许你放入你已经在其他地方处理过的那个项目,但是通过这样做,这允许你注册下一个回叫.

接下来你需要添加的是这个

(dragenter)="onDragEnter('',$event)"

这实际上会调用onDragEnter函数,并将事件链接到它.
?您当然可以更改参数以匹配您需要的参数.

对于plunker,您可以在第38行将这两个添加到您的plunker并且它可以工作,这样您就不必尝试理解新的架构.

注意:我建议您不要在onDragEnter中使用警报(就像它当前一样),因为您会收到垃圾邮件.

我还建议查看https://www.w3schools.com/html/html5_draganddrop.asp,因为它提供了关于如何使用事件进行拖放的非常简单的解释.

如果您需要更多帮助,我会非常乐意提供帮助,请告诉我您的困惑在哪里.

(编辑:李大同)

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

    推荐文章
      热点阅读