- 输入数值左右移动
- 可以撤销和前进
- 操作指令输入模块
- 操作div模块
- 撤销和前进模块
- 状态管理模块
view:事件驱动->操作dom
data:事件触发->操作数据->映射器->操作dom
含义:把具体的指令与实现隔离,对调用与执行解耦
做法:将方法、数据都封装到单一的对象中,对调用方与执行方进行解耦,达到职责分离的目的
解决的问题:
- 不知道调用哪个api
- 调用的api复杂
- 不知道应该交给哪个对象执行
例子:客户-服务员-厨师
将方法封装为对象属性
var state = { front: function () { DataMangerOb.back(handler); changeDiv(DataMangerOb); }, back: function () { DataMangerOb.front(handler); changeDiv(DataMangerOb); } }; state[handler]();- 实现画廊效果
- 图片数量由后端数据指定,排列顺序不一定
- 每个图片下面有该图片的下标
数据驱动,分析模块 模块设计原则:低耦合,针对需求,方便扩展 模块列表:
- 生成dom
- 渲染dom
- 命令解析
//各大框架使用的内容--与默认指令合并 //1.默认指令,不需要用户输入 //2.防止漏输入 var final = {}; var defaultHandler = { data: [], id: document, way: 'normal', size: [100, 100] } //合并配置 for (var item of defaultHandler) { if (handler[item]) { final[item] = handler[item]; if (item === 'id') { final.id = document.getElementById(item) } } else { final[item] = defaultHandler[item] } } return final;题外话:使用函数柯里化
styleArr.forEach((style, index) => { switch (index) { case 0: handlerDom=div break case 1: handlerDom=span break case 1: handlerDom=img break default: } for(var item in style){ handlerDom.style[item]=style[item] } })