关键词:
一、抽出头部作为一个组件,在底部导航的时候可以相应的显示不同的标题
技术点:使用slot进行组件间的通信;父组件给子组件传值(子组件里面通过props接收父组件传过来的数据)
查看链接:https://blog.csdn.net/sinat_17775997/article/details/52484072
//components/HeaderTop/HeaderTop.vue <template> <header class="header"> <slot name="search"></slot> <a class="header_title"> <span class="header_title_text ellipsis">title</span> </a> <slot name="login"></slot> </header> </template> <script> export default props: title: String
<template> <HeaderTop title="南昌市华东交通大学南区"> <router-link slot="search" to="/search" class="header_search"> <i class="iconfont icon-sousuo"></i> </router-link> <router-link slot="login" to="/login" class="header_login"> <span class="header_login_text">登录|注册</span> </router-link> </HeaderTop> </template> <script> import HeaderTop from ‘../../components/HeaderTop/HeaderTop.vue‘ import ShopList from ‘../../components/ShopList/ShopList.vue‘ export default components: HeaderTop, ShopList </script>
<template> <HeaderTop title="订单列表"></HeaderTop> </template> <script> import HeaderTop from ‘../../components/HeaderTop/HeaderTop.vue‘ export default components: HeaderTop </script>
<template> <HeaderTop title="搜索"></HeaderTop> </template> <script> import HeaderTop from ‘../../components/HeaderTop/HeaderTop.vue‘ export default components: HeaderTop </script>
<template> <HeaderTop title="我的"></HeaderTop> </template> <script> import HeaderTop from ‘../../components/HeaderTop/HeaderTop.vue‘ export default components: HeaderTop </script>
二、抽出商家列表编辑成单独组件
三、编辑登录界面
提示:返回前面的路由使用 $router.back()
<template> <div class="loginContainer"> <div class="loginInner"> <div class="login_header"> <h2 class="login_logo">饿了么</h2> <div class="login_header_title"> <a href="javascript:;" class="on">短信登录</a> <a href="javascript:;">密码登录</a> </div> </div> <div class="login_content"> <form> <div :class="on"> <section class="login_message"> <input type="tel" maxlength="11" placeholder="手机号"> <button disabled="disabled" class="get_verification">获取验证码</button> </section> <section class="login_verification"> <input type="tel" maxlength="8" placeholder="验证码" v-model="code"> </section> <section class="login_hint"> 温馨提示:未注册饿了么帐号的手机号,登录时将自动注册,且代表已同意 <a href="javascript:;">《用户服务协议》</a> </section> </div> <div> <section> <section class="login_message"> <input type="text" maxlength="11" placeholder="手机/邮箱/用户名"> </section> <section class="login_verification"> <input type="text" maxlength="8" placeholder="密码"> <div class="switch_button off"> <div class="switch_circle"></div> <span class="switch_text">...</span> </div> </section> <section class="login_message"> <input type="text" maxlength="11" placeholder="验证码"> <img class="get_verification" src="./images/captcha.svg" alt="captcha"> </section> </section> </div> <button class="login_submit">登录</button> </form> <a href="javascript:;" class="about_us">关于我们</a> </div> <span href="javascript:" class="go_back" @click="$router.back()"> <i class="iconfont icon-fanhuijiantou"></i> </span> </div> </div> </template> <script> export default </script> <style lang="stylus" rel="stylesheet/stylus"> @import "../../common/stylus/mixins.styl" .loginContainer width 100% height 100% background #fff .loginInner padding-top 60px width 80% margin 0 auto .login_header .login_logo font-size 40px font-weight bold color #0090ff text-align center .login_header_title padding-top 40px text-align center >a color #333 font-size 14px padding-bottom 4px &:first-child margin-right 40px &.on color #0090ff font-weight 700 border-bottom 2px solid #0090ff .login_content >form >div display none &.on display block input width 100% height 100% padding-left 10px box-sizing border-box border 1px solid #ddd border-radius 4px outline 0 font 400 14px Arial &:focus border 1px solid #0090ff .login_message position relative margin-top 16px height 48px font-size 14px background #fff .get_verification position absolute top 50% right 10px transform translateY(-50%) border 0 color #ccc font-size 14px background transparent &.right_phone color black .login_verification position relative margin-top 16px height 48px font-size 14px background #fff .switch_button font-size 12px border 1px solid #ddd border-radius 8px transition background-color .3s,border-color .3s padding 0 6px width 30px height 16px line-height 16px color #fff position absolute top 50% right 10px transform translateY(-50%) &.off background #fff .switch_text float right color #ddd &.on background #0090ff >.switch_circle position absolute top -1px left -1px width 16px height 16px border 1px solid #ddd border-radius 50% background #fff box-shadow 0 2px 4px 0 rgba(0,0,0,.1) transition transform .3s &.right transform translateX(30px) .login_hint margin-top 12px color #999 font-size 14px line-height 20px >a color #0090ff .login_submit display block width 100% height 42px margin-top 30px border-radius 4px background #0090ff color #fff text-align center font-size 16px line-height 42px border 0 .about_us display block font-size 12px margin-top 20px text-align center color #999 .go_back position absolute top 5px left 5px width 30px height 30px >.iconfont font-size 20px color #999 </style>
然后注册Login路由
router/index.js
//引入组件 import Login from ‘../pages/Login/Login.vue‘ path: ‘/login‘, component: Login
四、控制底部导航的显示隐藏。
注意:此时底部导航FooterGuide仅仅在Msite,Order,Search,Profile才显示,Login上不会显示。
技术点:v-show="$route.meta.show"
查看链接:http://www.cnblogs.com/nns4/p/8589539.html
https://segmentfault.com/q/1010000007648124
<template> <div id="app"> <router-view/> <FooterGuide v-show="$route.meta.showFooter"></FooterGuide> </div> </template>
router/index.js
export default new Router( routes: [ path: ‘/‘, redirect: ‘/msite‘ , path: ‘/msite‘, component: Msite, meta: showFooter: true , path: ‘/search‘, component: Search, meta: showFooter: true , path: ‘/order‘, component: Order, meta: showFooter: true , path: ‘/profile‘, component: Profile, meta: showFooter: true , path: ‘/login‘, component: Login ] )
从这开始做后台数据交互应用
五、封装ajax请求。
api/ajax.js
提示:使用axios
import axios from ‘axios‘ export default function ajax(url = ‘‘, data = , type = ‘GET‘) return new Promise(function (resolve, reject) let promise if (type === ‘GET‘) // 准备 url query 参数数据 let dataStr = ‘‘ Object.keys(data).forEach(key => dataStr += key + ‘=‘ + data[key] + ‘&‘ ) if (dataStr !== ‘‘) dataStr = dataStr.substring(0,dataStr.lastIndexOf(‘&‘)) url = url + ‘?‘ + dataStr // 发送get请求 promise = axios.get(url) else // 发送post请求 promise = axios.post(url,data) promise.then(response => resolve(response.data) ) .catch(error => reject(error) ) )
然后根据api接口类型设置请求函数的路由
api/index.js
import ajax from ‘./ajax.js‘ // 根据经纬度获取位置详情 export const reqAddress = (geohash) => ajax(`/position/$geohash`) // 获取食品的分类列表 export const reqFoodCategories = () => ajax(‘/index_category‘) // 根据经纬度获取商铺列表 export const reqShops = (longitude,latitude) => ajax(‘/shops‘,longitude,latitude) // 账号密码登录 export const reqPwdLogin = (name,pwd,captcha) => ajax(‘/api/login_pwd‘, name, pwd, captcha ,‘POST‘) // 获取短信验证码 export const reqSendCode = phone => ajax(‘/api/sendcode‘,phone) // 手机号验证码登录 export const reqSmsLogin = (phone,code) => ajax(‘/api/login_sms‘,phone,code,‘POST‘) // 获取用户信息 export const reqUser = () => ajax(‘/api/userinfo‘) // 请求登出 export const reqLogout = () => ajax(‘/api/logout‘)
六、配置webpack实现跨域
查看链接:https://www.cnblogs.com/zishang91/p/8909900.html
https://segmentfault.com/a/1190000011007043
config/index.js
proxyTable: ‘/api‘: // 配置所有以api开头的请求路径 target: ‘http://localhost:4000‘, // 代理目标的基础路径 changeOrigin: true, //支持跨域 pathRewrite: ‘^/api‘: ‘‘ ,
一个基于springboot+redis+vue仿饿了么外卖系统(后台+移动端),可二次开发接私活!...(代码片段)
...完整的外卖系统,包括手机端,后台管理,api基于springboot和vue的前后端分离的外卖系统包含完整的手机端,后台管理功能本项目主要供交流学习,不建议商用02技术栈核心框架:SpringBoot数据库层:Spring... 查看详情
vue.js高仿饿了么外卖app
1.架构从传统的MVC向RESTAPI+前端MV*迁移参考链接:http://blog.csdn.net/broadview2006/article/details/8615055http://blog.csdn.net/u013628152/article/details/42709033MV*包括:MVC、MVP、MVVMvue.js是MVVM框架 2.Iconmoon制作图标字体2 查看详情
基于vue2+nuxt构建的高仿饿了么(2018版)(代码片段)
...预览)移动端扫描下方二维码API接口文档接口文档地址(基于apidoc)技术栈vue2+vuex+vue-router+mint-ui+nuxt项目运行gitclone[email protec 查看详情
基于springboot+redis+vue仿饿了么外卖系统(后台+移动端)
优质文章,第一时间送达 六、运行效果前端展示(点击图片查看大图)后台管理(点击图片查看大图) 七、源码下载源码下载云盘链接:链接:https://pan.baidu.com/s/1djb2BmP3S6l9OfzT62Nd6A提取码:lry9复制这... 查看详情
vue.js高仿饿了么外卖app2016最火前端框架百度云
...快20%-50%,尽管在某些情况下还要更快)。我们可以提供一个到这个参照项目的链接,但是坦率的说,所有的参照在某些方面是有缺陷的,很少有像你所写的一个真实应用。那么,让我们详细了解下吧。渲染性能在渲染用户界面... 查看详情
仿饿了么首页导航栏(viewpager)
...了么首页中我们能看到这样的布局(如下图)。红框内是一个可以左右滑动的页面,每一个页面类似于九宫格,都有可供点击图标。对于这样的布局,我在网上找了很久都没有找到相关的名称,所以我这里暂时叫它导航页吧。最... 查看详情
仿饿了么购物车下单效果
仿饿了么购物车下单效果前一段由于新项目需要,开发一个类似饿了么购物车下单效果,电商类、外卖类、点餐类项目都可以用的上,废话不多说请看效果。效果图如下:主要的功能:就是左侧展示分类,右侧展示分类下商品的,... 查看详情
饿了么购物车动画(代码片段)
...是怎么实现的,但是看了很多仿饿了么的demo都是实现了一个完整的大的项目,要找到那个小模块很麻烦,所以自己将联动菜单和动画提取出来写了一个demo,方便学习。目的只是想突出功能所以界面细节很relax,大家也relax的看看... 查看详情
经典文摘:饿了么的pwa升级实践(结合vue.js)
...内web与浏览器生态的发展。您可能感兴趣的相关文章网站开发中很有用 查看详情
高仿饿了么mock本地数据(代码片段)
新版webpack.dev.conf.js配置本地数据访问://引入express模块constexpress=require(‘express‘)//创建express对象constapp=express()//引入请求文件加载本地数据文件constappData=require(‘../data.json‘)//获取对应的本地数据constseller=appData.sellerconstg 查看详情
vue2高仿饿了么app
Github地址: https://github.com/ccyinghua/appEleme-project 一、构建项目所用:vueinitwebpackappEleme-projectnpmrundevcnpminstallnode-sass--save-devcnpminstallsass-loader--save-dev//sass-loader依赖于node-sas 查看详情
vue饿了么的技术点
一:项目目录设计。1:制作矢量图片的图标字体。打开icomoon.io网站,点击importicons,上传自己的svg图片,制作自己的图片,上传之后点击generatefont图标,下载然后把其中的font文件夹复制,style.css复制到style文件夹,修改为icom.styl... 查看详情
前端实战项目:vue.js实现外卖平台webapp,饿了么项目的翻版
...相应的商品分类也会跟着跳转。2.用户评价页面主要包括一个TAB栏,包括三部分:全部、有图和评价三个模块3.商家信息页面主要介绍一些商家基本信息,可以通过better-scroll插件,进行左右滑动图片。效果预览:再说一篇,是饿... 查看详情
饿了么订单记录怎么删除
...之后,我们就能够看到自己在饿了么订过的单了哦。找到一个我们需要删除的订单。左滑3、左滑后会出现一个删除的字样,点击4、自动弹出框框显示是否确认删除订单哦,点击继续删除就可以了呢。参考技术A饿了么是一个点外... 查看详情
外卖订单爬虫(美团,饿了么,百度外卖)
...是用来抓取外卖平台(美团,饿了么,百度)的商户订单开发,并不是一个通用库,而是为这个特定场景进行开发的。适用场景:餐饮企业拥有多家外卖门店,订单量非常大,有对订单进行数据分析的需求。主要功能:每天定时... 查看详情
饿了么的架构设计及演进之路
网站在刚开始的时候大概只是一个想法:一个产业的模型,快速地将它产生出来。“快”是第一位的,不需要花太多精力在架构设计上。在网站进入扩张期才需要对架构投入更多的精力来承载网站在爆发时的流量。饿了么成立已... 查看详情
仿饿了么项目-vue-cli开启项目
环境搭建安装nodeJs在用vue-cli开启项目之前,首先我们需要安装Node环境,安装Node很简单,只需要去官网下载http://nodejs.cn/download/,下载完成后点击安装,安装过程很简单,一直next即可,安装完成会自动添加node及npm环境变量。检... 查看详情
美团饿了么外卖点菜界面联动菜单性能优化(代码片段)
...骤3采用的是实时遍历,现在抛弃这种做法。而是,生产一个跳转函数,可以使用if...else也可以使用switch...case,这里选用后者,因为性能更加出众。注:生成的jumpFunc是字符串,需要使用eval()来进行函数转换。5.代码示例(vue)计算... 查看详情