Vue拖拽组件列表实现动态页面配置功能


Posted in Javascript onJune 17, 2019

需求描述

最近在做一个后台系统,有一个功能产品需求是页面分为左右两部分,通过右边的组件列表来动态配置左边的页面视图,并且左边由组件拼装起来的视图,可以实现上下拖拽改变顺序,也可以删除。

根据这个需求我做了下面这个demo。

功能分解

  • 右边的组件列表,可以通过拖拽克隆到左边,拖拽结束后右边组件列表数量不会减少
  • 左边的组件可以展开或收起
  • 左边的组件可以上下拖拽,删除,但不可向右边拖拽
  • 左边组件拖拽过程中不改变其展开和收起状态

demo截图

Vue拖拽组件列表实现动态页面配置功能

代码地址

vue-draggable-list

代码预览

<template>
 <div class="row">
  <div class="col-5">
   <h3>组件配置页面展示</h3>
   <draggable
    tag="el-collapse"
    class="dragArea list-group"
    :list="list2"
    group="comp"
    @change="log"
   >
    <el-collapse
     class="list-group-item left"
     v-for="(element,index) in list2"
     :key="index"
     v-model="activeNames"
     @change="handleChange"
    >
     <el-collapse-item :name="element.id">
      <template slot="title">
       <span>{{element.name}}</span>
       <i class="el-icon-circle-close" @click.stop="deleteItem(index)"></i>
      </template>
      <div>{{ element.content }}</div>
     </el-collapse-item>
    </el-collapse>
   </draggable>
  </div>
  <div class="col-5">
   <h3>可用组件列表</h3>
   <draggable
    class="dragArea list-group"
    :list="list1"
    :group="{ name: 'comp', pull: 'clone', put: false }"
    @change="log"
   >
    <div class="list-group-item" v-for="element in list1" :key="element.id">{{ element.name }}</div>
   </draggable>
  </div>
 </div>
</template>
<script>
import draggable from "vuedraggable";
export default {
 name: "clone",
 display: "Clone",
 order: 2,
 components: {
  draggable
 },
 data() {
  return {
   list1: [
    { name: "组件1", id: 1, content: "内容内容内容。。。。" },
    { name: "组件2", id: 2, content: "内容内容内容。。。。" },
    { name: "组件3", id: 3, content: "内容内容内容。。。。" },
    { name: "组件4", id: 4, content: "内容内容内容。。。。" },
    { name: "组件5", id: 5, content: "内容内容内容。。。。" },
    { name: "组件6", id: 6, content: "内容内容内容。。。。" },
    { name: "组件7", id: 7, content: "内容内容内容。。。。" }
   ],
   list2: [],
   activeNames: [],
   count: 0
  };
 },
 methods: {
  log: function(evt) {
   console.log(evt);
   if (evt.added) {
    this.count += 1;
    const item = evt.added.element;
    const idx = this.list2.findIndex(e => e.id === item.id);
    let temp = JSON.parse(JSON.stringify(this.list2));
    temp[idx].id = this.count;
    this.list2 = temp;
   }
  },
  handleChange: function() {},
  deleteItem: function(index) {
   this.list2.splice(index, 1);
  }
 }
};
</script>

总结

以上所述是小编给大家介绍的Vue拖拽组件列表实现动态页面配置功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
jQuery语法高亮插件支持各种程序源代码语法着色加亮
Apr 27 Javascript
Javascript 多浏览器兼容总结(实战经验)
Oct 30 Javascript
简单实用的反馈表单无刷新提交带验证
Nov 15 Javascript
jQuery判断checkbox是否选中的小例子
Dec 02 Javascript
Jquery通过JSON字符串创建JSON对象
Aug 24 Javascript
轻量级网页遮罩层jQuery插件用法实例
Jul 31 Javascript
微信小程序 Video API实例详解
Oct 02 Javascript
Jquery针对tr td的一些实用操作方法(必看篇)
Oct 05 Javascript
简单谈谈js的数据类型
Sep 25 Javascript
使用vue根据状态添加列表数据和删除列表数据的实例
Sep 29 Javascript
深入了解query和params的使用区别
Jun 24 Javascript
详解JavaScript中的执行上下文及调用堆栈
Apr 29 Javascript
javascript实现日历效果
Jun 17 #Javascript
如何使用Node.js爬取任意网页资源并输出PDF文件到本地
Jun 17 #Javascript
javascript使用substring实现的展开与收缩文字功能示例
Jun 17 #Javascript
vue+element加入签名效果(移动端可用)
Jun 17 #Javascript
详解Vue.js中引入图片路径的几种方式
Jun 17 #Javascript
最简单的vue消息提示全局组件的方法
Jun 16 #Javascript
如何进行微信公众号开发的本地调试的方法
Jun 16 #Javascript
You might like
环境会对咖啡种植有什么影响
2021/03/03 咖啡文化
php面向对象全攻略 (十七) 自动加载类
2009/09/30 PHP
测试php连接mysql是否成功的代码分享
2014/01/24 PHP
php备份数据库类分享
2015/04/14 PHP
WordPress中重置文章循环的rewind_posts()函数讲解
2016/01/11 PHP
详谈symfony window下的安装 安装时候出现的问题以及解决方法
2017/09/28 PHP
Laravel中如何轻松容易的输出完整的SQL语句
2020/07/26 PHP
PHP编程一定要改掉的5个不良习惯
2020/09/18 PHP
超级兔子让浮动层消失的前因后果
2007/03/09 Javascript
jquery 事件执行检测代码
2009/12/09 Javascript
Javascript计算两个marker之间的距离(Google Map V3)
2013/04/26 Javascript
HTML页面弹出居中可拖拽的自定义窗口层
2014/05/07 Javascript
jQuery 过滤方法filter()选择具有特殊属性的元素
2014/06/15 Javascript
node.js中的fs.truncate方法使用说明
2014/12/15 Javascript
js实现简单的秒表
2020/01/16 Javascript
[58:15]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 NB vs Liquid
2018/04/02 DOTA
python中关于日期时间处理的问答集锦
2013/03/08 Python
简单讲解Python中的字符串与字符串的输入输出
2016/03/13 Python
一张图带我们入门Python基础教程
2017/02/05 Python
windows下python安装pip图文教程
2018/05/25 Python
利用Python进行数据可视化常见的9种方法!超实用!
2018/07/11 Python
Python实现的简单线性回归算法实例分析
2018/12/26 Python
PyQt5通信机制 信号与槽详解
2019/08/07 Python
Python pandas库中的isnull()详解
2019/12/26 Python
Python实现列表中非负数保留,负数转化为指定的数值方式
2020/06/04 Python
Python将list元素转存为CSV文件的实现
2020/11/16 Python
玩转CSS3色彩
2010/01/16 HTML / CSS
在C语言中"指针和数组等价"到底是什么意思?
2014/03/24 面试题
上班看电影检讨书
2014/02/12 职场文书
《望庐山瀑布》教学反思
2014/04/22 职场文书
工会工作先进事迹
2014/08/18 职场文书
党员四风自我剖析材料思想汇报
2014/09/13 职场文书
2019个人工作自我评价范文(3篇)
2019/09/19 职场文书
《语言的突破》读后感3篇
2019/12/12 职场文书
JS封装cavans多种滤镜组件
2022/02/15 Javascript
Python实现批量自动整理文件
2022/03/16 Python