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 相关文章推荐
JS代码格式化和语法着色V2
Oct 14 Javascript
JavaScript中的几个关键概念的理解-原型链的构建
May 12 Javascript
JavaScript 性能优化小结
Oct 12 Javascript
基于Bootstrap的Metronic框架实现页面链接收藏夹功能
Aug 29 Javascript
bootstrap快速制作后台界面
Dec 05 Javascript
利用Vue v-model实现一个自定义的表单组件
Apr 27 Javascript
vue.js全局API之nextTick全面解析
Jul 07 Javascript
基于Vue实例对象的数据选项
Aug 09 Javascript
Vue ElementUi同时校验多个表单(巧用new promise)
Jun 06 Javascript
vue 移动端适配方案详解
Nov 15 Javascript
Vue 中使用富文本编译器wangEditor3的方法
Sep 26 Javascript
Javascript异步流程控制之串行执行详解
Sep 27 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
laravel-admin解决表单select联动时,编辑默认没选上的问题
2019/09/30 PHP
NodeJS的模块写法入门(实例代码)
2012/03/07 NodeJs
动态的改变IFrame的高度实现IFrame自动伸展适应高度
2012/12/28 Javascript
实现只能输入数字的input不用replace方法
2013/09/12 Javascript
JS常用正则表达式总结
2013/11/12 Javascript
jquery如何实现锚点链接之间的平滑滚动
2013/12/02 Javascript
js 处理数组重复元素示例代码
2013/12/27 Javascript
jquery的ajax跨域请求原理和示例
2014/05/08 Javascript
IE8下Jquery获取select选中的值post到后台报错问题
2014/07/02 Javascript
JavaScript+html5 canvas制作的百花齐放效果完整实例
2016/01/26 Javascript
jQuery实现选项卡功能(两种方法)
2017/03/08 Javascript
CSS3+JavaScript实现翻页幻灯片效果
2017/06/28 Javascript
jQuery Pagination分页插件_动力节点Java学院整理
2017/07/17 jQuery
通过js动态创建标签,并设置属性方法
2018/02/24 Javascript
layui问题之模拟select点击事件的实例讲解
2018/08/15 Javascript
JavaScript中0、空字符串、'0'是true还是false的知识点分享
2019/09/16 Javascript
利用H5api实现时钟的绘制(javascript)
2020/09/13 Javascript
[08:08]2014DOTA2国际邀请赛中国区预选赛精彩TOPPLAY
2014/06/25 DOTA
[00:03]DOTA2新版本PA至宝展示
2014/11/19 DOTA
Python编写生成验证码的脚本的教程
2015/05/04 Python
python提取字典key列表的方法
2015/07/11 Python
python中redis的安装和使用
2016/12/04 Python
Python+selenium点击网页上指定坐标的实例
2019/07/05 Python
python plotly画柱状图代码实例
2019/12/13 Python
python异常处理、自定义异常、断言原理与用法分析
2020/03/23 Python
python torch.utils.data.DataLoader使用方法
2020/04/02 Python
将tf.batch_matmul替换成tf.matmul的实现
2020/06/18 Python
幼儿教师自我鉴定
2013/11/02 职场文书
初一英语教学反思
2014/01/11 职场文书
演讲主持词
2014/03/18 职场文书
财产公证书
2014/04/10 职场文书
考试作弊检讨书
2014/10/21 职场文书
2014年培训工作总结范文
2014/11/27 职场文书
超搞笑婚前保证书
2015/05/08 职场文书
Python 游戏大作炫酷机甲闯关游戏爆肝数千行代码实现案例进阶
2021/10/16 Python
聊聊redis-dump工具安装问题
2022/01/18 Redis