博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Angular实现的网上商城SKU组合查询组件
阅读量:6388 次
发布时间:2019-06-23

本文共 1958 字,大约阅读时间需要 6 分钟。

最近学习了angular,正好又完整的做了一个电商网站,就利用angular实现了一个sku组合查询组件,首先介绍sku是个什么东西。sku=stock keeping unit(库存量单位),sku即库存进出计量的单位, 可以是以件、盒、托盘等为单位。在服装、鞋类商品中使用最多最普遍。 例如服装中一个SKU(XL###红色###男款的一件衣服)通常表示:尺码、颜色、款式等。

例子

demo(先看下例子):

repository:

组件具体实现了什么功能呢?一种商品不同的sku组合是互斥的,例如一件衣服,可能有很多属性,属性可以自由组合,但是有的属性没有货,这时候需要实现一个功能,用户无法选择属性组合。 例如XL###红色没有货,而S###红色有货,则用户选了红色之后,XL就不能选,S可以选。S###红色选中之后,在callback中更新库存等操作。

它是一个util组件,样式可以由使用者自己定义。html部分是由后台模板引擎,基于模板来生成的文本输出,例如freemaker(java语言编写的模板引擎),一般是这么写的。自定义的html写在ui-sku中间

<#if (product.parameters?size>0)>  
<#list product.parameters as param >
${param.name!''}
    <#list param.values as key >
  • ${key}

对应生成的html(在angular代码接管之前生成的html,及angular执行bootstrap之前)

尺码
  • S
  • M
  • ...
...

组件接收4个参数skuData,splitStr,initSku,onOk

  • skuData为组件结接收的数据(数据有一定格式,需要后台开发配合给)

    {        'S#红色#男': {          count: 0        },        'M#红色#女': {          count: 0        },        'S#橙色#男': {          count: 1        },       'M#橙色#女': {          count: 1        },        .....      }
  • splitStr为不同key之间的分格缝(S#红色#男中指的是‘#’)

  • initSku为默认设置的选中key(可以设置为M#红色#女)

  • onOk点击key之后的callback

简单讲解一下组件是怎么工作的

  • 首先手动设置transclude,解决用ng-transclude scope作用域问题

    transclude(scope, function(clone){       element.append(clone);    });
  • 根据sku-data,获得属性值的数组

    getSkuList-->transpose-->unique    [['S', '红色,'男'], ['M','红色','女'],['S','橙色','男'],['M','橙色','女']]-->矩阵转置-->去重元素得到    [['S', 'M'], ['红色','橙色'],['男','女']]
  • scope.selected保存了已选中的属性,每次点击(支持反选)属性值的时候执行checkItem,getNum会检查当前sku组合是否可以选中。getNum参考了的实现,已经查询过的sku组合会做缓存,是一种空间换时间的算法。

  • 设置每个属性值中数据模型中的selected和disabled

缺点

  • 所需要的数据结构格式固定

  • transclude template书写方式还是有点别扭(样式需要自定义所造成)

对angularjs的掌握程度不深,实现得不够完善,还望大牛们指出不足的地方。

最后介绍一个同事的mvvm库 ,轻量级,很不错,还支持到IE6。查看reference点

参考

转载地址:http://cmdha.baihongyu.com/

你可能感兴趣的文章
七牛实时音视频云视频连线demo(web部分)
查看>>
Mysql 权限
查看>>
Spring事务管理(详解+实例)
查看>>
ubuntu apt-get install 出现无法定位软件包...
查看>>
centos7 下 基于docker搭建java/tomcat (方式一)
查看>>
全世界最好的编辑器VIM之Windows配置(gvim)[未测试]
查看>>
2018年你需要知道的13个JavaScript工具库
查看>>
当你点击按钮的时候如何设置其他按钮不可点击
查看>>
spring 高级装配
查看>>
【合集】parasoft Jtest 从安装到使用教程合集,收藏推荐!
查看>>
Python Pygame库的学习之路(1)
查看>>
信息安全与Linux系统
查看>>
Ubuntu安装mysql
查看>>
SpringCloud 微服务 (十四) 服务网关 Zuul 过滤器(Pre&Post)
查看>>
代理设计模式
查看>>
初识Shiro
查看>>
在Developerkit开发板上运行blink例程
查看>>
企业级性能、安全可靠 阿里云发布企业级大数据平台开发者版
查看>>
Spring Boot使用过程小记(一)--加载自定义的Spring XML
查看>>
Git分支关联远程GitHub分支出错
查看>>