




已阅读5页,还剩96页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
高仿”饿了吗”外卖App1. 准备1.1. 项目描述l 此项目为外卖App核心的商家模块的SPAl 包括商品、评论、商家介绍、购物车等多个子模块l 使用Vuejs+ES6+Webpack等前端最新最热的技术l 采用模块化、组件化、工程化的模式开发1.2. 项目功能界面 1.3. 技术选型1.4. 前端路由1.5. API接口1.6. vue组件01. app.vue* 应用的根组件02. header.vue* 页面头部显示商家基本信息的组件03. goods.vue* 商品分路由组件: 商品列表/购物车相关功能04. ratings.vue* 评价分路由组件: 商品评价列表05. seller.vue* 商家详情分路由组件: 显示商家详情06. star.vue* 星级评价组件07. food.vue* 商品列表组件: 显示商品分类/商品列表, 购物项加减09. cartcontrol.vue* 购物项操作组件: 增加/减少某个购物项的数量10. ratingselect.vue* 商品评论列表组件: 过滤查看商品评价列表11. split.vue* 分隔线小组件08. shopcart.vue* 底部购物车组件: 显示购物项列表及相关操作1.7. 你能从此项目中学到什么?l 流程及开发方法n 了解一个项目的开发流程n 学会组件化、模块化、工程化的开发模式n 掌握使用Vue-cli脚手架初始化Vue.js项目n 学会模拟json后端数据,前后端分离开发n 学会es6+eslint的开发方式l 第三方组件n 学会使用stylus编写模块化的CSSn 学会使用vue-router开发单页应用n 学会使用vue-resource与后端数据交互n 学会如何在Vue.js框架里和第三方JS插件交互l 设计思想与模式n 学会使用Vue.js的过渡编写酷炫的交互动画n 了解移动端设备像素比的概念n 学会制作并使用图标字n 学会解决移动端1px边框问题n 学会移动端经典的css sticky footer布局n 学会flex弹性布局2. 应用开发详解2.1. 开启项目开发1) 使用vue-cli(脚手架)搭建项目l Vue-cli是vue官方提供的用于搭建基于vue+webpack+es6项目的脚手架工具l 在线文档: /vuejs/vue-clil 操作:n npm install -g vue-cli : 全局下载工具n vue init webpack#1.0 vue_app :下载基于webpack模板项目n cd vue_appn cyarn / npm install : 下载项目依赖的所有模块n npm run devn 访问: localhost:80802) 项目结构分析vue_app|- build : webpack相关的配置文件夹(基本不需要修改)|- dev-server.js : 通过express启动后台服务器|- config: webpack相关的配置文件夹(基本不需要修改)|- index.js: 指定的后台服务的端口号和静态资源文件夹|- node_modules|- src : 源码文件夹|- components: vue组件及其相关资源文件夹|- app.vue: 应用根主组件|- main.js: 应用入口js|- static: 静态资源文件夹|- .babelrc: babel的配置文件|- .editorconfig: 通过编辑器的编码/格式进行一定的配置|- .eslintignore: eslint检查忽略的配置|- .eslintrc.js: eslint检查的配置|- .gitignore: git版本管制忽略的配置|- index.html: 主页面文件|- package.json: 应用包配置文件 |- README.md: 应用描述说明的readme文件3) 编码测试与打包发布项目l 编码测试:n npm run devn 访问: http:/localhost:8080n 编码, 自动编译打包(HMR), 查看效果l 打包发布n npm run buildn npm install -g pushstate-servern pushstate-server distn 访问: http:/localhost:90002.2. 功能需求分析n 演示项目功能, 对功能模块进行分析说明2.3. 资源准备1) 相关概念n 标注图(设计稿): 对应用界面各个组成元素进行坐标/大小/颜色等进行标签的界面图n 切图: 将应用界面的一些静态图形部分, 通过工具(如photoshop)剪裁生成的图片n 图片Base64: 样式中引用的小图片, 在webpack打包会自动处理转换为样式内部的Base64编码字符串n 2x与3x图: 不同手机的屏幕密度不一样, 一般都在2以上(如iphone6为2,iphone6s为3),为了适配不同的手机, UI设计师为同一个图片制作了2x和3x的2套图片(图形一样, 但大小不一样)2) 图标字体制作n 图标字体: 使用IcoMoon将SVG格式的图标转换生成图标字体及样式n 进入icoMoon官网: https:/icomoon.io/n 点击右上角, 进入处理页面n 点击左上角,选择resourceSVG*.svg, 上传显示到页面n 在页面选择所有svg, 点击右下角生成图标字体样式n 点击左上角指定Font-Name为sell-icon,点击右下角下载到本地n 解压zip包, 访问demo.html测试n 我们项目需要的是fonts和style.css2.4. 项目源码目录设计src|- common-通用资源文件夹|- fonts -字体资源文件夹(图标字体文件)|- js-通用js文件夹|- stylus-通用stylus文件夹|- font.styl-图标字体样式|- components-所有vue组件文件夹|- header-头部组件文件夹|- header.vue-前部组件vue|- xxx.png-头部相关的n个图标|- seller-商家详情组件文件夹|- seller.vue-商家详情组件vue|- goods-商品组件文件夹|- goods.vue-商品组件vue|- ratings-评价组件文件夹|- ratings.vue-评价组件vue|- app.vue-应用根组件vue|- main.js-应用入口js2.5. Stylus1) 当前主流的三种css预编译器(对比)n Lessn Sassn Stylus2) 安装stylus依赖包l npm install stylus stylus-loader -save-dev3) Stylus的基本语法n stylus中文版参考文档n 结构化: u 完全通过缩进控制, 不需要大括号和分号,冒号是可选的n 父级引用: u 使用字符&指向父选择器n 变量: u 定义变量: name=value 如: mainColor = #0982c1u 引用变量: name 如: color mainColoru name可以没有前缀要求, 但最好以$开头(好识别)n 混合(Mixins)u 也就是预处器中的函数u 函数参数可以指定默认值u 某段CSS样式要用到多个元素上, 只有其中的1,2个样式值有变化n 导入(import)u 通过import引入其它样式文件4) 将font字体及样式加入l 将icomoonfonts下所有文件拷贝到srccommonfonts目录下l 将iconmoonstyle.css拷贝到srccommonstylus下, 重命名为font.styll 去除文件中的大括号和分号, 并修正url路径font-face font-family: sell-icon src: url(./fonts/sell-icon.eot?q98quz) src: url(./fonts/sell-icon.eot?q98quz#iefix) format(embedded-opentype), url(./fonts/sell-icon.ttf?q98quz) format(truetype), url(./fonts/sell-icon.woff?q98quz) format(woff), url(./fonts/sell-icon.svg?q98quz#sell-icon) format(svg) font-weight: normal font-style: normalclass=icon-, class*= icon- /* use !important to prevent issues with browser extensions that change fonts */ font-family: sell-icon !important speak: none font-style: normal font-weight: normal font-variant: normal text-transform: none line-height: 1 /* Better Font Rendering = */ -webkit-font-smoothing: antialiased -moz-osx-font-smoothing: grayscale.icon-add_circle:before content: e900.icon-arrow_lift:before content: e901.icon-check_circle:before content: e902.icon-close:before content: e903.icon-favorite:before content: e904.icon-keyboard_arrow_right:before content: e905.icon-remove_circle_outline:before content: e906.icon-shopping_cart:before content: e907.icon-thumb_down:before content: e908.icon-thumb_up:before content: e9095) 其它基础stylus样式l base.stylhtml,body font-family: PingFang SC, STHeitiSC-Light, Helvetica-Light, arial, sans-serifmedia (min-device-pixel-ratio: 2),(-webkit-min-device-pixel-ratio: 2) .border-1px &:after transform:scaleY(0.5) -webkit-transform:scaleY(0.5)media (min-device-pixel-ratio: 3),(-webkit-min-device-pixel-ratio: 3) .border-1px &:after transform:scaleY(0.333333333333333333) -webkit-transform:scaleY(0.333333333333333333).clearfix zoom:1 &:after content: display:block clear:both height:0 line-height:0 visibility:hiddenl Mixin.styl/ 混合:把混合底下的样式集原封不动的搬到调用处border-1px($color) position: relative &:after position: absolute left: 0 bottom: 0 content: display: block border-top: 1px solid $color width: 100%bg-image($url) background-image: url($url + 2x.png) media (min-device-pixel-ratio: 3),(-webkit-min-device-pixel-ratio: 3) background-image: url($url + 3x.png)l index.stylimport style.stylimport base.styl2.6. ESLint n ESLint是一个代码规范检查工具n 基本已替代以前的JSLintn ESLint提供以下支持u ES6u AngularJSu JSXu Style检查u 自定义错误和提示n ESLint提供以下几种校验u 语法错误校验u 不重要或丢失的标点符号,如分号u 没法运行到的代码块(使用过WebStorm的童鞋应该了解)u 未被使用的参数提醒u 漏掉的结束符,如u 确保样式的统一规则,如sass或者lessu 检查变量的命名n 规则的错误等级有三种u 0:关闭规则。u 1:打开规则,并且作为一个警告(不影响exit code)。u 2:打开规则,并且作为一个错误(exit code将会是1)。n 相关配置文件u .eslintrc.js : 规则相关配置文件, 可以在此修改规则u .eslintignore: 指令检查忽略的文件,可以在此添加想忽略的文件2.7. Vue组件化1) 配置vue组件文件模板2) 分析应用的整体vue组件结构src|- components-所有vue组件文件夹|- header-头部组件文件夹|- header.vue-前部组件vue|- xxx.png-头部相关的n个图标|- seller-商家详情组件文件夹|- seller.vue-商家详情组件vue|- goods-商品组件文件夹|- goods.vue-商品组件vue|- ratings-评价组件文件夹|- ratings.vue-评价组件vue|- app.vue-应用根组件vue|- main.js-应用入口js3) 各个vue组件的基本代码l header.vue header vue template export default l goods.vue goods vue template export default l ratings.vue ratings vue template export default l seller.vue seller vue template export default l app.vue app vue template export default l main.jsimport Vue from vueimport App from ./App/* eslint-disable no-new */new Vue( el: body, components: App )2.8. 引入vue-router1) 下载vue-routerl npm install vue-router0.7.13 -save2) 编码l main.jsimport Vue from vueimport VueRouter from vue-routerimport app from ./appimport goods from ./components/goods/goodsimport ratings from ./components/ratings/ratingsimport seller from ./components/seller/seller/ 声明使用vue的扩展插件Vue.use(VueRouter)/ 创建router对象let router = new VueRouter()/ 映射路由router.map( /goods: component: goods , /ratings: component: ratings , /seller: component: seller )/ 启动路由router.start(app, #app)/ 请求默认路由router.go(/goods)l app.vue 商品 评价 商家 import header from ./components/header/header export default / 配置组件 components: v-header: header .tab .tab-item display inline-block .v-link-active color: #ff0000l index.html 3) 引入reset样式l static/css/reset.css/* * Eric Meyers Reset CSS v2.0 (/eric/tools/css/reset/) * */html, body, div, span, applet, object, iframe,h1, h2, h3, h4, h5, h6, p, blockquote, pre,a, abbr, acronym, address, big, cite, code,del, dfn, em, img, ins, kbd, q, s, samp,small, strike, strong, sub, sup, tt, var,b, u, i, center,dl, dt, dd, ol, ul, li,fieldset, form, label, legend,table, caption, tbody, tfoot, thead, tr, th, td,article, aside, canvas, details, embed,figure, figcaption, footer, header,menu, nav, output, ruby, section, summary,time, mark, audio, video, input margin: 0; padding: 0; border: 0; font-size: 100%; font-weight: normal; vertical-align: baseline;/* HTML5 display-role reset for older browsers */article, aside, details, figcaption, figure,footer, header, menu, nav, section display: block;body line-height: 1;blockquote, q quotes: none;blockquote:before, blockquote:after,q:before, q:after content: none;table border-collapse: collapse; border-spacing: 0;/* custom */a color: #7e8c8d; text-decoration: none; -webkit-backface-visibility: hidden;li list-style: none;:-webkit-scrollbar width: 5px; height: 5px;:-webkit-scrollbar-track-piece background-color: rgba(0, 0, 0, 0.2); -webkit-border-radius: 6px;:-webkit-scrollbar-thumb:vertical height: 5px; background-color: rgba(125, 125, 125, 0.7); -webkit-border-radius: 6px;:-webkit-scrollbar-thumb:horizontal width: 5px; background-color: rgba(125, 125, 125, 0.7); -webkit-border-radius: 6px;html, body width: 100%;body -webkit-text-size-adjust: none; -webkit-tap-highlight-color: rgba(0, 0, 0, 0);l index.html中引入4) 添加viewportl index.html5) 运行效果 2.9. 选项卡效果1) 说明l 3个选项水平平均分配文字居中: flex布局l 点击Item的整个区域都要能响应, 而不仅是文本区: display blockl 选项底部一个像素高度的横线: after伪类 + media缩放2) 编码l main.jsimport ./common/stylus/index.styll app.vue import ./common/stylus/mixin.styl .tab display: flex width: 100% height: 40px line-height: 40px / border-bottom: 1px solid rgba(7, 17, 27, 0.1) border-1px(rgba(7, 17, 27, 0.1) .tab-item flex: 1 text-align: center & a display: block font-size: 14px color: rgb(77, 85, 93) &.active color: rgb(240, 20, 20)2.10. 模拟(mock)数据1) Web应用前后端(台)分离: n 后台向前台提供API接口, 只负责数据的提供和计算,而完全不处理展现n 前台通过Http(Ajax)请求获取数据,在浏览器端动态构建界面显示数据2) 设计JSON数据结构n 理解JSON数据结构n 编写模拟JSON数据: src/mock/data.json3) 利用Node+express提供模拟数据n build/dev-server.js/加载json数据var apiData = require(./src/mock/data.json)var seller = apiData.seller;var goods = apiData.goods;var ratings = apiData.ratings;/得到路由器var apiRouter = express.Router()/注册路由apiRouter.get(/seller, function (req, res) res.json( errno: 0, /0代表正确数据 data: seller )apiRouter.get(/goods, function (req, res) res.json( errno: 0, data: goods )apiRouter.get(/ratings, function (req, res) res.json( errno: 0, data: ratings )/启用路由app.use(/api, apiRouter)问题: 如果是打包发布就无法访问模拟数据, 只能是测试时使用4) 利用mockjs提供模拟数据l Mockjs: 用来拦截ajax请求, 生成随机数据返回l 学习n /n /nuysoft/Mockl 下载: npm install mockjs -savel 使用import apiData from ./data.jsonimport Mock from mockjs /npm install mockjs -saveMock.mock(/api2/seller, errno:0, data:apiData.seller)Mock.mock(/api2/goods, errno:0, data:apiData.goods)Mock.mock(/api2/ratings, errno:0, data:apiData.ratings)好处: 打包发布运行模拟接口也是可以用的, 这样便于大家演示5) 使用postman工具测试接口n postman是用来测试API接口的chrome插件n postman也是一个活接口文档6) 引入vue-resource访问mock数据接口n vue-resource是vue项目中ajax请求库n 官网: /pagekit/vue-resourcen 下载: npm install vue-resource -saven 使用示例:import VueResource from vue-resource Vue.use(VueResource)/组件对象多了$http属性, 使用它发送ajax请求this.$http.get(/api/goods).then(response) = console.log(response.body), (response) = console.log(失败了)2.11. 开发header组件1) 在app.vue中请求获取商家数据, 并传递给header组件data() return seller: ,created () this.$http.get(/api/seller).then(response) = const result = response.body console.log(result) if(result.errno = OK) this.seller = result.data )2) header组件样式 import ././common/stylus/mixin.styl .header position:relative color:rgb(255,255,255) overflow:hidden background-color:rgba(7,17,27,0.5) .content-wrapper position:relative padding 24px 12px 18px 24px font-size:0 .avatar display: inline-block vertical-align: top .content display: inline-block margin-left: 16px .title margin: 2px 0 8px 0 .brand margin-right: 6px vertical-align:top bg-image(brand) display: inline-block width: 30px height: 18px background-size:30px 18px background-repeat:no-repeat .name font-size: 16px line-height: 18px font-weight: bold .description font-size: 12px font-weight: 200 line-height: 12px .support margin: 10px 0 2px 0 .icon margin-right:4px vertical-align:top display:inline-block width: 12px height: 12px background-size: 12px 12px background-repeat: no-repeat &.decrease bg-image(decrease_1) &.discount bg-image(discount_1) &.guarantee bg-image(guarantee_1) &.invoice bg-image(invoice_1) &.special bg-image(special_1) .text font-size: 10px font-weight: 200 line-height: 12px .supports_count position:absolute right: 12px bottom: 15px height: 24px padding: 7px 8px border-radius: 8px background-color: rgba(0,0,0,0.2) box-sizing:border-box .count vertical-align:top font-size: 10px line-height: 12px font-weight: 200 margin-right:2px .icon-keyboard_arrow_right font-size: 10px line-height: 12px font-weight: 200 .bulletin-wrapper background-color:rgba(7,17,27,0.2) position:relative padding: 0 20px 0 12px overflow:hidden text-overflow:ellipsis white-space:nowrap display:block .bulletin-title vertical-align:middle display:inline-block width: 22px height: 12px bg
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 第四章 光现象 单元测试卷 (含答案)2025-2026学年人教版(2024)八年级物理上册
- 2025春季中国南水北调集团水网智慧科技有限公司实习生招募6人模拟试卷及答案详解(考点梳理)
- 2025年智能制造的智能化升级路径
- 2025年智能音箱的语音识别技术
- 2025年智能交通系统中的车辆识别技术
- 2025年智能农业的精准施肥技术
- 2025年海洋能源装备:海水淡化反渗透膜技术创新在海洋风力发电中的应用
- 2025贵州铜仁开放大学引进专业技术人才考前自测高频考点模拟试题及一套完整答案详解
- 2025北京市通州区马驹桥镇招考20人模拟试卷及答案详解(网校专用)
- 2025年福建省泉州市丰泽区部分公办学校专项公开编制内17人模拟试卷及答案详解(必刷)
- 2025年初级药师资格考试试题(附答案)
- 2025国企竞聘上岗与干部竞聘上岗笔试题及答案
- 人工智能与建筑产业体系智能化升级研究报告
- 武科大大学生手册考试内容及答案
- 集装箱吊装专项施工方案
- 2025年中国家用WiFi路由器行业市场全景分析及前景机遇研判报告
- 包覆拉拔法制备铜包铝、铜包钢双金属导线的多维度探究与展望
- 2025年领导干部任前廉政法规知识考试题库(含答案)
- 2025年山东省济宁市邹城市第十一中学中考二模数学试题
- 信息技术基础教程(WPS版)课件 第3章 Windows 10 操作系统的使用
- 小鹿斑比题目及答案
评论
0/150
提交评论