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 相关文章推荐
两种WEB下的模态对话框 (asp.net或js的分别实现)
Dec 02 Javascript
js实现的折叠导航示例
Nov 29 Javascript
Javascript中的Callback方法浅析
Mar 15 Javascript
jQuery实现类似淘宝网图片放大效果的方法
Jul 08 Javascript
jQuery实现的导航动画效果(附demo源码)
Apr 01 Javascript
Swiper 4.x 使用方法(移动端网站的内容触摸滑动)
May 17 Javascript
node.js读取Excel数据(下载图片)的方法示例
Aug 02 Javascript
Three.js实现3D机房效果
Dec 30 Javascript
一文了解Vue中的nextTick
May 06 Javascript
JavaScript实现页面中录音功能的方法
Jun 04 Javascript
vue 检测用户上传图片宽高的方法
Feb 06 Javascript
js实现超级玛丽小游戏
Mar 18 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
php遍历所有文件及文件夹的方法深入解析
2013/06/08 PHP
解析阿里云ubuntu12.04环境下配置Apache+PHP+PHPmyadmin+MYsql
2013/06/26 PHP
php设计模式之单例、多例设计模式的应用分析
2013/06/30 PHP
php版小黄鸡simsimi聊天机器人接口分享
2014/01/26 PHP
PHP下获取上个月、下个月、本月的日期(strtotime,date)
2014/02/02 PHP
Symfony数据校验方法实例分析
2015/01/26 PHP
php示例详解Constructor Prototype Pattern 原型模式
2015/10/15 PHP
[原创]php求圆周率的简单实现方法
2016/05/30 PHP
PHP开启目录引索+fancyindex漂亮目录浏览带搜索功能
2019/09/23 PHP
IE图片缓存document.execCommand(&quot;BackgroundImageCache&quot;,false,true)
2011/03/01 Javascript
jQuery+AJAX实现网页无刷新上传
2015/02/22 Javascript
js运动动画的八个知识点
2015/03/12 Javascript
Javascript显示和隐藏ul列表的方法
2015/07/15 Javascript
javascript中this指向详解
2016/04/23 Javascript
js制作支付倒计时页面
2016/10/21 Javascript
JS实现的五级联动菜单效果完整实例
2017/02/23 Javascript
JavaScript中object和Object的区别(详解)
2017/02/27 Javascript
node.js操作mongodb简单示例分享
2017/05/25 Javascript
图片加载完成再执行事件的实例
2017/11/16 Javascript
vue实现在表格里,取每行的id的方法
2018/03/09 Javascript
vue+vue-router转场动画的实例代码
2018/09/01 Javascript
JavaScript中的ES6 Proxy的具体使用
2019/06/16 Javascript
VueCli生产环境打包部署跨域失败的解决
2020/11/13 Javascript
Python的Django框架中forms表单类的使用方法详解
2016/06/21 Python
python针对excel的操作技巧
2018/03/13 Python
Python实现接受任意个数参数的函数方法
2018/04/21 Python
Django基于客户端下载文件实现方法
2020/04/21 Python
浅谈keras中的后端backend及其相关函数(K.prod,K.cast)
2020/06/29 Python
戴尔加拿大官网:Dell加拿大
2016/09/17 全球购物
为什么要使用servlet
2016/01/17 面试题
工程力学专业毕业生求职信
2013/10/06 职场文书
结婚周年感言
2014/02/24 职场文书
政府班子四风问题整改措施思想汇报
2014/10/08 职场文书
2015国庆节感想
2015/08/04 职场文书
甜美蛋糕店的创业计划书模板,拿来即用!
2019/08/21 职场文书
python opencv人脸识别考勤系统的完整源码
2021/04/26 Python