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 相关文章推荐
javascript定时保存表单数据的代码
Mar 17 Javascript
Query中click(),bind(),live(),delegate()的区别
Nov 19 Javascript
jquery改变tr背景色的示例代码
Dec 28 Javascript
jQuery中attr()和prop()在修改checked属性时的区别
Jul 18 Javascript
Jquery通过JSON字符串创建JSON对象
Aug 24 Javascript
jquery+ajax请求且带返回值的代码
Aug 12 Javascript
jQuery动态添加
Apr 07 Javascript
jQuery获取多种input值的简单实现方法
Jun 20 Javascript
BootStrap 图标icon符号图标glyphicons不正常显示的快速解决办法
Dec 08 Javascript
webpack的 rquire.context用法实现工程自动化的方法
Feb 07 Javascript
Vue实现PC端靠边悬浮球的代码
May 09 Javascript
微信小程序基于ColorUI构建皮皮虾短视频去水印组件
Nov 04 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 读取shell管道传输过来的内容
2010/03/01 PHP
phpphp图片采集后按原路径保存图片示例
2014/02/18 PHP
php析构函数的简单使用说明
2015/08/24 PHP
php-fpm添加service服务的例子
2018/04/27 PHP
javascript得到XML某节点的子节点个数的脚本
2008/10/11 Javascript
在一个浏览器里呈现所有浏览器测试结果的前端测试工具的思路
2010/03/02 Javascript
简单的代码实现jquery定时器
2013/11/17 Javascript
JS删除字符串中重复字符方法
2014/03/09 Javascript
js图片闪动特效可以控制间隔时间如几分钟闪动一下
2014/08/12 Javascript
jQuery中prevUntil()方法用法实例
2015/01/08 Javascript
jQuery滚动条插件nanoscroller使用指南
2015/04/21 Javascript
Javascript中常用类型的格式化方法小结
2016/12/26 Javascript
vue 自定义 select内置组件
2018/04/10 Javascript
layer.confirm取消按钮绑定事件的方法
2018/08/17 Javascript
微信小程序车牌号码模拟键盘输入功能的实现代码
2018/11/11 Javascript
使用Angular自定义字段校验指令的方法示例
2019/02/01 Javascript
浅谈JS和jQuery的区别
2019/03/27 jQuery
策略模式实现 Vue 动态表单验证的方法
2019/09/16 Javascript
js实现Element中input组件的部分功能并封装成组件(实例代码)
2021/03/02 Javascript
使用PYTHON接收多播数据的代码
2012/03/01 Python
Python天气预报采集器实现代码(网页爬虫)
2012/10/07 Python
Cpy和Python的效率对比
2015/03/20 Python
pygame学习笔记(3):运动速率、时间、事件、文字
2015/04/15 Python
Python3使用PyQt5制作简单的画板/手写板实例
2017/10/19 Python
python中cPickle类使用方法详解
2018/08/27 Python
Python 文本文件内容批量抽取实例
2018/12/10 Python
详解Python下载图片并保存本地的两种方式
2019/05/15 Python
解决Python中报错TypeError: must be str, not bytes问题
2020/04/07 Python
英国第一摩托车和摩托车越野配件商店:GhostBikes
2019/03/10 全球购物
Boom手表官网:瑞典手表品牌,设计你的手表
2019/03/11 全球购物
2015年财务人员个人工作总结
2015/07/27 职场文书
祝酒词范文
2015/08/12 职场文书
运动会广播稿50字
2015/08/19 职场文书
golang elasticsearch Client的使用详解
2021/05/05 Golang
python正则表达式re.search()的基本使用教程
2021/05/21 Python
python 如何做一个识别率百分百的OCR
2021/05/29 Python