首页 > 其他分享 >angularjs 拖拽实现方案

angularjs 拖拽实现方案

时间:2023-04-27 18:04:40浏览次数:23  
标签:方案 list value id let angularjs scope currentLi 拖拽

最近有一个拖拽排序的功能遍历后无法直接读取index 和 item。换了一种思路实现功能

<!DOCTYPE html>
<html lang="en" ng-app="myApp">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body ng-controller="demoController">
    <ul class="list">
        <li draggable="true" ng-repeat="li in arr track by $index" data-value="{{li.value}}" data-id="{{li.id}}">{{li.value}}{{$index}}</li>
    </ul>
    <button ng-click="save()">保存数据</button>
    
    <script src="https://cdn.bootcdn.net/ajax/libs/angular.js/1.8.3/angular.min.js"></script>
    <script src="/bundle.js"></script>
</body>

</html>

 

let app = angular.module('myApp', []);
app.controller('demoController', ['$scope', function($scope) {
  
    $scope.arr = [{
        value: '赵',
        id: 1
    }, {
        value: '钱',
        id: 2
    }, {
        value: '孙',
        id: 3
    }, {
        value: '李',
        id: 4
    }, {
        value: '周',
        id: 5
    }];

    let list = document.querySelector('.list')
    let currentLi;
   
    list.addEventListener('dragstart', (e) => {
        e.dataTransfer.effectAllowed = 'move'
        currentLi = e.target
        setTimeout(() => {
            currentLi.classList.add('moving')
        })
    })

    list.addEventListener('dragenter', (e) => {
        e.preventDefault()
        if (e.target === currentLi || e.target === list) {
            return
        }
        let liArray = Array.from(list.childNodes)
        let currentIndex = liArray.indexOf(currentLi)
        let targetindex = liArray.indexOf(e.target)

        if (currentIndex < targetindex) {
            list.insertBefore(currentLi, e.target.nextElementSibling)
        } else {
            list.insertBefore(currentLi, e.target)
        }
    })

    list.addEventListener('dragover', (e) => {
        e.preventDefault()
    })

    list.addEventListener('dragend', (e) => {
        currentLi.classList.remove('moving')
        
        //操作完毕赋值
        for (let k = 0; k < list.children.length; k++) {
            $scope.arr[k] = {
                value: list.children[k].dataset.value,
                id: list.children[k].dataset.id
            };
        }
    })

    $scope.save = function() {
        console.log($scope.arr)
    }

}]);

 

标签:方案,list,value,id,let,angularjs,scope,currentLi,拖拽
From: https://www.cnblogs.com/yiyangl/p/17359807.html

相关文章

  • 提高网络安全性:探索ADAudit Plus的全功能IT安全审计解决方案
    数据安全一直是企业和组织的重要问题之一,而DataSecurityPlus作为一款数据安全解决方案,能够为企业提供全面的数据安全保障。首先,DataSecurityPlus可以对企业的敏感数据进行监控和审计,通过实时监控和记录文件、文件夹、数据库、邮件和打印机等资源的访问和操作,保障企业数据的安全性......
  • 除螨仪语音方案芯片推荐:NV040D 家用8脚语音ic
    随着时代的发展,大家对于健康的重视程度越来越高,而螨虫这类生物对于特殊群体来说,可能会带来皮肤问题,甚至引发呼吸道疾病,困扰生活,由此,清除床上的螨虫就成为了一个较为刚性的需求。除螨仪也就随之被发明,通过拍打、紫外线照射、吸尘和一定温度实现除螨操作,保持床铺清洁。 NV040D除......
  • 前端项目使用vw视口单位进行适配时字体大小的解决方案
    使用视口单位vw来实现响应式排版。1vw等同于视口宽度的百分之一,即如果你用vw来设定字体大小的话,字体的大小将总是随视口的大小进行改变。问题在于,当做上面的事情的时候,因为文本总是随着视口的大小改变大小,用户失去了放缩任何使用vw单位的文本的能力。所以你永远都不要只用viewpo......
  • 高保真智能录音机解决方案技术特色解析
    需求分析 随着数字化进程的不断推进,录音机的需求也在逐渐发生变化。用户对录音机的需求逐渐朝着,微型化,便携化,智能化的方向靠拢。鉴于此,团队根据市场的变化,及时推出了一系列高保真的数字录音机方案,方便系统集成厂商集成和运用,满足个性化的产品需求。 特色梳理 有趣的灵魂......
  • 无界微前端方案官方示例,main-vue 项目打包之后 访问index.html页面空包,控制台报资源错
    报错信息: 修改方案: publicPath:“./”修改为如上配置即可。......
  • 前端跨域解决方案——CORS
    CORS(跨来源资源共享)是一种用于解决跨域问题的方案。CORS(跨来源资源共享)是一种安全机制,用于在浏览器和服务器之间传递数据时,限制来自不同域名的请求。在前端开发中,当通过XMLHttpRequest(XHR)或FetchAPI发送跨域请求时,如果服务器没有正确配置CORS,浏览器会阻止该请求,从而导致请求......
  • 解决方案下的项目版本号统一
    解决方案下的项目往往需要让生成的程序集版本号统一,最简单的方式当然是打开每一个项目下的AssemblyInfo.cs文件修改,或者使用项目属性修改。最近,发现还有一种更简单的方式,下面仔细介绍它。 步骤1、创建一个SolutionInfo.cs的文件,放到解决方案下。内容类似为: 步骤2、修改各......
  • 最佳存款方案
    一、问题描述假设银行一年整存零取的月息为0.63%。 现在某人手中有一笔钱,他打算在今后的5年中的每年年底取出1000 元,到第5年时刚好取完,请算出他存钱时应存入多少。二、解题思路根据题意,可以从第五年向前推,可知第五年年底会取出1000元,则可以计算出第5年年初在银行中所......
  • python+playwright 学习-57 svg 元素拖拽
    前言SVG英文全称为ScalablevectorGraphics,意思为可缩放的矢量图,这种元素比较特殊,需要通过​name​()函数来进行定位。本篇讲下关于svg元素的拖拽相关操作。拖拽svg元素如图所示,svg下的circle元素是可以拖动的比如往右拖动100个像素,那么cx的值由原来的cx="100"变成......
  • freeswitch的任务引擎问题与解决方案
     概述freeswitch核心框架中有一个定时任务系统task,在开发过程中用来做一些延时操作和异步操作很方便。我们在VOIP的呼叫流程中,经常会有一些对实时性要求没那么高的操作,或者会有阻塞流程的操作,我们都可以开启一个定时任务子流程,来达到延时和异步的目标。但是在实际的生产应用......