vue实现商城上货组件简易版


Posted in Javascript onNovember 27, 2017

本文实例为大家分享了vue实现商城上货组件的具体代码,供大家参考,具体内容如下

0、结果放前面

点击查看效果

带脚手架的源码

加个Star后,fork下来。

然后在控制台,先输入npm install安装依赖,再输入npm run dev运行查看效果

1、先列需求

一切开发都是基于需求做的,所以需求先行,根据需求设计功能。

需求如下:

  • 上货商品有多个属性类别;(例如:颜色、尺寸、型号)
  • 每个类别有多个子属性;(例如:白色、绿色、金色)
  • 每个商品必然具备每个类别的其中一个子属性;
  • 除此之外还有额外属性,如【库存】、【描述】、【价格】等,每个都有;
  • 要求属性类别可以无限添加;
  • 要求每个属性类别下面的子属性可以无限添加;
  • 最后输出所有组合,以及他们每个组合的额外属性;

例如:

  • 颜色(白色,金色),尺寸(41,42);
  • 那么一共有四种组合:(白色,41),(白色,42),(金色,41),(金色,42);
  • 然后给每个组合加上价格、数量等属性,最后用JSON格式输出;

例如输出以下结果:

[
 {
  '颜色': '白色',
  '尺寸': '10',
  'price': '0',
  'count': '1'
 },
 {
  '颜色': '白色',
  '尺寸': '20',
  'price': '0',
  'count': '1'
 },
 {
  '颜色': '绿色',
  '尺寸': '10',
  'price': '0',
  'count': '1'
 },
 {
  '颜色': '绿色',
  '尺寸': '20',
  'price': '0',
  'count': '1'
 }
]

2、思路

由于无限可扩展的特性,因此模块分拆为两部分:

负责支持无限添加功能(包括类别和类别的属性);
根据已添加的类别和属性,组合出列表,并将列表展示或输出;

3、代码如下

由于功能类似,因此没有写删除、修改功能,但思路跟添加是一致的。

点击查看效果

带脚手架的源码

加个Star后,fork下来。

然后在控制台,先输入npm install安装依赖,再输入npm run dev运行查看效果

详细请参考注释:

/**
* Created by 王冬 on 2017/11/14.
* QQ: 20004604
* weChat: qq20004604
*/

<template>
 <div>
  <button @click='getList'>输出结果</button>
  <div>
   输入分类名,然后点击【确认】按钮添加新的分类
   <input type='text' v-model='category'>
   <button @click='addCategory'>确认</button>
  </div>

  <template v-for='i in categoryList'>
   <div class='category'>
    <p>类别:{{i.name}}</p>
    <div>属性:
     <p>新增属性名:<input type='text' v-model='i.newPropertyName'>
      <button @click='addToPropertyList(i)'>点击添加</button>
     </p>
     <div class='property-list'>
      <template v-for='pro in i.propertyList'>
       <div class='property'>{{pro}}</div>
      </template>
      <div class='clearfloat'></div>
     </div>
    </div>
   </div>
  </template>

  <p>以下是展示列表</p>
  <div class='show-list'>
   <table>
    <tr>
     <td v-for='i in categoryList'>
      {{i.name}}
     </td>
     <td>价格</td>
     <td>数量</td>
    </tr>
    <tr v-for='(val,key) in showList'>
     <td v-for='i in categoryList'>
      {{val[i.name]}}
     </td>
     <td>
      <input type='text' v-model="val['price']">
     </td>
     <td>
      <input type='text' v-model="val['count']">
     </td>
    </tr>
   </table>
  </div>
 </div>
</template>
<style scoped>
 .category {
  border: 1px solid #333;
 }

 .property {
  float: left;
  border: 1px solid #333;
  display: inline-block;
 }

 table {
  border-collapse: collapse;
 }

 th, td {
  border: 1px solid #000;
 }

 /*--清除浮动--*/
 .clearfloat {
  width: 0;
  clear: both;
  overflow: hidden;
  visibility: hidden;
 }
</style>
<script>
 export default {
  data () {
   return {
    // 要添加的新类别的名字
    category: '',
    // 类别列表
    categoryList: [
     {
      // 类别名
      name: '颜色',
      // 类别属性列表
      propertyList: ['白色', '绿色']
     },
     {
      name: '尺寸',
      propertyList: ['10', '20']
     },
     {
      name: '类型',
      propertyList: ['衣服', '裤子']
     }
    ]
   }
  },
  computed: {
   // 输出列表
   showList () {
    let arr = []
    this.toGet(arr, {}, 0, this.categoryList.length)
    return arr
   }
  },
  methods: {
   // 添加一个新的类别
   addCategory () {
    // 创建新类别
    let obj = {
     name: this.category,
     propertyList: [],
     newPropertyName: ''
    }
    // 添加到类别列表中
    this.categoryList.push(obj)
    this.category = ''
   },
   // 向类别添加属性
   addToPropertyList (category) {
    // 在该类别的属性里列表里添加新的属性
    category.propertyList.push(category.newPropertyName)
    category.newPropertyName = ''
   },
   // 递归
   getList () {
    console.log(this.showList)
    return this.showList
   },
   // 将数据组合成列表,利用递归的特性
   toGet (arr, obj, currentIndex, maxLength) {
    if (currentIndex >= maxLength) {
     return
    }
    this.categoryList[currentIndex].propertyList.forEach(item => {
     // 在组合到最后一个之前,不停的往模板对象上添加属性
     obj[this.categoryList[currentIndex].name] = item
     if (currentIndex === maxLength - 1) {
      // 组合到最后一个后,创建一个新的对象,然后放置入列表中
      let result = Object.assign({}, obj)
      result.price = '0'
      result.count = '1'
      arr.push(result)
     } else {
      this.toGet(arr, obj, currentIndex + 1, maxLength)
     }
    })
   }
  }
 }
</script>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
tbody元素支持嵌套的注意方法
Mar 24 Javascript
Div自动滚动到末尾的代码
Oct 26 Javascript
javascript操作Cookie(设置、读取、删除)方法详解
Mar 18 Javascript
js如何实现淡入淡出效果
Nov 18 Javascript
谈谈JavaScript类型系统之Math
Jan 06 Javascript
Vue学习笔记之表单输入控件绑定
Sep 05 Javascript
jQuery实现倒计时功能 jQuery实现计时器功能
Sep 19 jQuery
Vue封装Swiper实现图片轮播效果
Feb 06 Javascript
Vue Element使用icon图标教程详解(第三方)
Feb 07 Javascript
js中document.write和document.writeln的区别
Mar 11 Javascript
vue-router命名路由和编程式路由传参讲解
Jan 19 Javascript
JS/CSS实现字符串单词首字母大写功能
Sep 03 Javascript
修改UA在PC中访问只能在微信中打开的链接方法
Nov 27 #Javascript
Vue的移动端多图上传插件vue-easy-uploader的示例代码
Nov 27 #Javascript
vue实现商城购物车功能
Nov 27 #Javascript
Vim快速合并行及vim 将文件所有行合并到一行
Nov 27 #Javascript
详解利用Angular实现多团队模块化SPA开发框架
Nov 27 #Javascript
JavaScript实现修改伪类样式
Nov 27 #Javascript
Vue.js搭建移动端购物车界面
Jun 28 #Javascript
You might like
php flush类输出缓冲剖析
2008/10/19 PHP
PHP 采集程序中常用的函数
2009/12/09 PHP
php自动给文章加关键词链接的函数代码
2012/11/29 PHP
用Simple Excel导出xls实现方法
2012/12/06 PHP
windows中为php安装mongodb与memcache
2015/01/06 PHP
php结合正则批量抓取网页中邮箱地址
2015/05/19 PHP
Laravel 微信小程序后端搭建步骤详解
2019/11/26 PHP
jQuery代码优化 选择符篇
2011/11/01 Javascript
基于jquery的时间段实现代码
2012/08/02 Javascript
随鼠标上下滚动的jquery代码
2013/12/05 Javascript
javascript中cookie对象用法实例分析
2015/01/30 Javascript
jquery中radio checked问题
2015/03/16 Javascript
JavaScript中模拟实现jsonp
2015/06/19 Javascript
jQuery热气球动画半透明背景的后台登录界面代码分享
2015/08/28 Javascript
使用JavaScript和CSS实现文本隔行换色的方法
2015/11/04 Javascript
jQuery四种选择器使用及示例
2016/06/05 Javascript
jstl中判断list中是否包含某个值的简单方法
2016/10/14 Javascript
ajax的分页查询示例(不刷新页面)
2017/01/11 Javascript
搭建简单的nodejs http服务器详解
2017/03/09 NodeJs
Vue的事件响应式进度条组件实例详解
2018/02/04 Javascript
node.js实现上传文件功能
2019/07/15 Javascript
Python比较两个图片相似度的方法
2015/03/13 Python
详解Python自建logging模块
2018/01/29 Python
python函数调用,循环,列表复制实例
2020/05/03 Python
python 实现 hive中类似 lateral view explode的功能示例
2020/05/18 Python
python中字典增加和删除使用方法
2020/09/30 Python
matplotlib自定义鼠标光标坐标格式的实现
2021/01/08 Python
德国传统玻璃制造商:Cristalica
2018/04/23 全球购物
酒店管理毕业生自荐信
2013/10/24 职场文书
计算机科学与技术应届生求职信
2013/11/07 职场文书
如何写好升职自荐信
2014/01/06 职场文书
纪念一二九运动演讲稿
2014/09/16 职场文书
2015年机关党委工作总结
2015/05/23 职场文书
2016年领导干部正风肃纪心得体会
2015/10/09 职场文书
配置nginx 重定向到系统维护页面
2021/06/08 Servers
MySQL系列之十三 MySQL的复制
2021/07/02 MySQL