全栈课程第六次作业 ---- 实现 sku的点击逻辑

10 阅读 作者:_弱鸡 2020-10-20

        这次作业花了2天时间才完成,确实有点难度啊,但是我觉得自己做得并不好,光嵌套3-4层的for循环就使用了10几次,而且数据结构上设计的不好,写到后面自己都晕了,希望后续课程能提高自己实现这个功能的水平,废话不多说了,先来看实现效果:

http://img3.sycdn.imooc.com/5e85c75b0001a0fa00190019.jpg

课程中提供了矩阵的思路,我基本延续了这个思路,只不过矩阵我是使用多维数组来实现的,


基本逻辑是这样的,我首先找到所有可能实现的情况,过程就是一些for循环遍历老师给的api数据即可:

http://img3.sycdn.imooc.com/5e85c7ed00010a5705960153.jpg

然后我需要根据将sku可能出现的key值,也就是颜色,图案,尺码,以及其中的每一个选项值遍历显示到page上,首先是数据准备,同样是利用矩阵和数组的思想,拿到一个二维数组:

http://img2.sycdn.imooc.com/5e85c9e10001e04e05680123.jpg

对应显示:

http://img2.sycdn.imooc.com/5e85cb0400012e5703410312.jpg

然后以这个数据为模板,看成是一个矩阵,那么可选择的4个sku就可以形成4个对应的二维数组,

1表示选中,0表示不可选或者未选中:

分别是:  把他们放进一个数组里面,这就是三维数组了(不知道算不算想复杂了),这个三维数组姑且命名为

threeDArray

http://img3.sycdn.imooc.com/5e85ca970001ec5505410095.jpg

    然后我将每一个可点击 item http://img2.sycdn.imooc.com/5e85cb730001059f00400026.jpg封装成一个自定义组件,因为他的颜色变动和可点击状态都会来回变化,所以封装成组件比较好,然后给他一个status的属性作为状态的标记,同时给他一个number属性,因为后续我会对每个item进行编号,便于状态查看,和点击事件的处理:

http://img1.sycdn.imooc.com/5e85cbf9000111ad08790784.jpg

    剩下的操作过程就是 每有一次点击事件,我都会在page页面中读取所有的item的status,然后以这个status形成一个新的数组,这个数组会和我之前定义的三维数组threeDArray进行比对,如果是包含关系,比如下图:

http://img1.sycdn.imooc.com/5e85d12f0001624903380303.jpg

http://img2.sycdn.imooc.com/5e85d1280001fa2205180152.jpg

就能找到包含他的可能结果对应矩阵:

http://img4.sycdn.imooc.com/5e85d1550001155204450182.jpg

那么左下角这个位置就是可以点击的,其他为0的位置就要设置成不可点击的,这里面我用到了父子组件间的通信:

之前调用sku-item组件时,我将number设置成了其id值,现在number可以派上用场了:

http://img1.sycdn.imooc.com/5e85d1f20001b98507640247.jpg

http://img1.sycdn.imooc.com/5e85d1d40001fad508300190.jpg


所以点击sku-item组件时,向父组件传递一个事件即可,让父组件可以遍历所有sku-item的status属性:

http://img3.sycdn.imooc.com/5e85d24e0001427409410394.jpg



    至于代码的细节部分我就不贴出来了,实在是写得不好,过于繁琐,估计一星期以后我自己都看不懂了,内容就是各种for循环,以及状态读取,没什么技术难度了.

点击查看更多内容
原文地址:https://www.imooc.com/article/302814
广告一下
热门教程
PHP7报A non well formed numeric value encountered 0
Linux系统下关闭mongodb的几种命令分享 0
mongodb删除数据、删除集合、删除数据库的命令 0
Git&Github极速入门与攻坚实战课程 0
python爬虫教程使用Django和scrapy实现 0
libnetsnmpmibs.so.31: cannot open shared object file 0
数据结构和算法视频教程 0
redis的hash结构怎么删除数据呢? 0
C++和LUA解析器的数据交互实战视频 0
mongodb errmsg" : "too many users are authenticated 0
C++基础入门视频教程 0
用30个小时精通C++视频教程可能吗? 0
C++分布式多线程游戏服务器开发视频教程socket tcp boost库 0
C++培训教程就业班教程 0
layui的util工具格式时间戳为字符串 0
C++实战教程之远程桌面远程控制实战 1
网络安全培训视频教程 0
LINUX_C++软件工程师视频教程高级项目实战 0
C++高级数据结构与算法视频教程 0
跨域问题很头疼?通过配置nginx轻松解决ajax跨域问题 0
相关文章
【译】JavaScript数据结构(3):单向链表与双向链表 16
10个JavaScript难点 16
【译】苹果拒绝支持PWA,有损Web的未来 16
iView 一周年了,同时发布了 2.0 正式版,但这只是开始... 16
nodejs+mongodb构建一个简单登录注册功能 16
【译】JavaScript数据结构(4):树 16
组件化开发与黑箱 16
TypeScript - 不止稳,而且快 16
webpack3+anujs+ReactCSSTransitionGroup 16
原生js实现图片放大镜效果 16
WEB缓存探究第二弹——实战 16
纯笔记:vfork 的一些使用场景(顺便讲一下 fork 的原理) 16
Android APP 内部捐赠实现(支付宝&微信) 16
WKWebView 的一些小总结 16
模型评价(一) AUC大法 16
开始使用GraphQL 16
Webpack模块化原理简析 16
gulp使用问题记录 16
使用Angular4动画为页面添彩 16
Python27 Matplotlib (win64 python2.7) 安装及简单使用 16