项目在线浏览
克隆至本地浏览:
- $ git clone git@github.com:Alcantara6/2018-World-Cup-Drawing.git
- npm install安装依赖包
- npm start启动项目
本项目基于Vue 2.0、vue-router、原生JavaScript、CSS2.1、CSS3的单页面应用,使用Vue-cli脚手架搭建,采用组件化和模块化的开发。
- 球队球员一览
- 球队名展示
- 关键球员数据和搜索
- 添加球员
- 查看球员信息
- 编辑球员
- 删除球员
- 模拟抽签
- 展示区:实时展示球队抽中状态
- 操作区
- 球队抽签
- 小组位次抽签
- 结果区:展示抽中球队落位情况和最终结果
- 状态区:操作流程和抽签实时状态提示
vue-route
搭建单页应用,导航<nav>
跳转分页面;球队、球员配置专属路径(动态路由),增、删、改、查互相关联。- Vue.js组件化开发,通过父、子组件传参实现数据共享、事件监听和状态管理。
- ES6的let/const、箭头函数、扩展运算符等的运用。
- 以
flex
为主,position
为辅的CSS布局;Vue
过渡、动画结合CSS3实现页面交互效果; JSON Server
模拟REST
风格的API,操作数据。
- 数据关联。球队、球员数据列表、添加球员、查看球员信息、编辑球员信息、删除球员信息各组件通过自身id和路由
路径参数
互相耦合来获取、传递数据,同时也使用了函数模式的props路由组件传参
,以及router-link
的to、append、tag等属性运用。 - 球队展示获取
JSON
数据后,利用Vue计算属性
和JSfilter
方法得到按大洲分组的球队。 - 球队展示和球员数据的布局。结合
float
和margin
的两栏布局,球队展示inline-block
。
- 球员搜索。多维属性匹配搜索,Vue
v-model
表单输入绑定,计算属性
中用原生JS操作符
运算返回搜索结果。 - 添加球员、编辑球员、删除球员操作跳转回本页面的数据更新和状态文本提示。通过
get
和put
数据、组件生命周期
钩子函数、路由导航守卫
、路由参数
更新数据。 - 球员数据表格。CSS
表格样式
、伪元素
设置各行交错的背景颜色。
- 添加球员信息。Vue
v-model
表单输入绑定,v-on事件、手动添加id,put数据至后台,$router.push
或$router.go跳转、传递params.query
参数。 - 输入验证。flag数据和
blur事件
绑定错误提示的显示与否,v-if
渲染错误信息,Vue计算属性
中正则表达式
验证输入,HTML5的required
属性。
- 球员信息卡片。
v-for
和v-if
的结合使用。 - 删除球员。
splice
删除、引入删除确认对话框组件的父子组件数据传递
。
抽签流程:
- 东道主俄罗斯自动落位A1,随后抽出第一档(种子档)的其他球队,分别落入B1-H1的其中一个签位。
- 依次抽出第二档、第三档和第四档球队,但抽出的球队落入的签位是随机的。
- 每个小组至少要有1支欧足联所属球队(但最多不超过2支),而其他足联所属球队在每个小组里最多只能有1支。
模拟抽签页面应用的构建主要在于:
- 抽签规则的算法
- 各种操作场景的判断
- 程序执行+友好的页面样式交互效果。
- 状态管理。
- 父组件drawPage集中管理主要状态参数: 如抽签轮次、允许操作项、抽中球队、抽中小组位次、分组结果、流程提示等,并通过
props
向子组件传递状态数据,从而决定子组件的显示和操作; - 子组件通过
自定义事件
向父组件传递抽签结果,从而更新状态。通过父、子组件传递状态参数,控制业务逻辑和页面交互效果。
- 开始抽签。$refs执行子组件的球队、小组位次打乱函数,并更新初始状态参数。
- 回避原则。依据抽签回避原则:
computed
计算正常顺序下的应落位小组;methdos
中封装函数
:正常情况下、同小组不能有两支相同大洲球队(欧洲除外)、同小组不能有超过两支欧洲球队三种情况下设置抽中球队和实际落位小组。methods中
封装函数`显示球队分组落位结果和是否存在回避
- 抽中球队的落位。组件
drawDialog
对话框用slot
具名插槽复用,$set
加入groupContainer数组,并递增抽签轮次。 - 布局。
flex
为主,position
为辅助。
- 展示区:实时展示球队抽中状态
- 操作区
- 球队抽签
- 小组位次抽签
- 结果区:展示抽中球队落位情况和最终结果
- 状态区:操作流程和抽签实时状态提示
- "打乱签"。
Math()
封装打乱数组的函数、CSS3的transform: rotate
改变位置、Vue的v-bind:style
。 - "过渡和动画"。CSS3的
transition
,Vue的transiton-group
和v-move
- "抽中的数据更新和样式显示"。设置对象属性、
v-if
遮罩显示隐藏。
主要用CSS3和Vue过渡提供当前高亮效果。
- props异步传参、对象属性缺失、计算属性等导致的页面渲染出错和解决措施
- 模拟抽签中揭签z-index层叠上下文的影响
- 尽量不从后台获取数据,子组件使用父组件的数据。
- 回避原则的函数尽量少进行遍历操作。
- 尽量封装函数,例如抽签回避原则。