Vue项目之硅谷外卖

Vue项目之硅谷外卖

1、API重要概念:

API接口、对接口、联调、前后台分离、mock数据

2、测试编码

npm run dev —在内存中将我们的项目进行编译打包,并且还打开了浏览器

访问:http://localhost:8080

编码,自动编译打包(HMR),查看效果

3、打包发布

npm run bulid打包生成的资源在dist里面

npm i -g serve

serve dist

访问:http://loaclhost:5000

4、图片Base64:样式中引用的小图片,在webpack打包会自动处理转化为样式内部的Base64编码字符串

5、项目源码目录设计

src

api 与后台交互模块文件夹

common通用资源文件夹,如:fonts/img/stylus

components非路由组件文件夹

filters自定义过滤器模块文件夹

mock模拟数据接口文件夹

pages路由组件文件夹

router路由器组件文件夹

store状态管理文件夹

App.vue应用组件

main.js入口JS

6、安装stylus依赖包

npm i stylus stylus-loader --save-dev

编写样式:

7、显示省略号

.ellipsis{

overflow:hidden;

text-overflow:ellipsis;

white-space:nowrap;

}

8、当点击切换的时候,自动添加on类名

<div @click='goTo('/search')' class='guide_item' :class='{on : '/search' === $route.path}'></div>
goTo(path){
   this.$router.replace(path)
}

9、界面更新就立即创建swiper对象

this是原型对象,里面有个$nextTick,这个回调函数就是一旦完成界面更新,立即调用;

this.$nextTick(()=>{
//创建一个Swiper实例对象,来实现轮播
new Swiper('.swiper-container',{
loop:true//可以循环轮播
//如果需要分页器
pagination:{
el:'.swiper-pagination',}
  })
})

10、actions的参数问题

里面有个系统自动注入的参数context里面有两个属性一个是state,commit;

第二个参数即为我们传递过来的参数;

11、当数据没有请求回来的时候,页面显示问题

在数据没有之前,使用背景图片去代替,利用v-if与v-else来实现,为了用户更好的体验

12、星星评分显示组件封装

props:{
 score:Number,
 size:Number
}
computed:{
//算法:3.2:3+0+2;3.5:3+1+1
startClasses(){
const {score} = this;
const scs = [];
//向scs中添加n个on;
const scoreInteger = Math.floor(score);
for(let i = 0; i<scoreInteger;i++ ){
scs.push(on)
}
//向scs中添加0/1个half
if(score*10-scoreInteger*10 >=5){
scs.push(hale)
}
//向scs中添加n个off
while(scs.length < 5){
  scs.pusk(off)
    }
  }
}
<div class='star' :class='"start-"+size'>
<span class='start-item on'></span>
<span class='start-item on'></span>
<span class='start-item on'></span>
<span class='start-item half'></span>
<span class='start-item off'></span>
</div>

//循环遍历
<div class='star' :class='"start-"+size'>
<span class='start-item' v-for='(sc,index) in startClasses' :class='sc' :key='index'></span>
</div>

13、登录功能

export default{
data(){
return {
loginWay:true,//true代表短信登录,false代表密码登录}
time:0

}}
//固定的类名,只是确定要不要
<div :class='{on:loginWay}' @click='loginWay = true'>短信登录</div>
<div :class='{on:!loginWay}' @click='loginWay = false'>密码登录</div>

//在标签中添加一个类名,这个类名有或者没有,根据条件来判断的
<button
:class='{right_phone:rightPhone}'
:disabled='!right_phone'
@click.prevent='getCode'>{{time?`已发送(${time}s)`:'获取验证码'}}
</button>
methods:{
//启动倒计时
getCode(){
//如果当前没有计时
if(!this.time){
 this.time = 30;
  let intervalId =  setInterval(()=>{
    this.time --;
    if(this.time==0) {
     clearInterval(intrvalId)
    }
    },1000) 
  }
  //发送请求(向指定手机号发送验证码短信)
 } 
}

14、模板中显示数据的来源

data:自身的数据(内部改变)

props:外部传入的数据(外部改变)

computed:根据data/props别的computed/state/getters

15、动态一次性图形验证码

//每次指定的src要不一样

event.target.src = ‘http://local:4000/captcha?time=’+Date.now();//在这里携带参数的含义是什么?

16、发送短信验证码

容联.云通信(注册、登录)

17、当前分类(外卖点餐页面)

(1)功能:

实现两个列表滑动;

当滑动右侧列表时,更新当前分类;

当点击某个分类项,右侧列表滑动到对应的位置;

(2)分析:

类名:current标识当前分类

设计一个计算属性:currentIndex

根据哪些数据计算?

scrollY:右侧滑动的Y轴坐标(滑动过程时实时变化);

tops:所有右侧分类li的top组成的数组;

(3)编码:

在滑动过程中,实时收集scrollY的值

在列表第一次显示后,收集tops

实现currentIndex的计算逻辑

实现列表的滑动:better-scroll
使用:
npm i better-scroll --save;
import BScroll from 'better-scroll';
data(){
return {
 scrollY:0;
 tops:[]
}
}

mounted(){


 this.$store.dispatch('getShopGoods',()=>{
   //列表数据更新显示后执行
   this.$nextTick(()=>{
   this._initScroll();
 })
 
 
}


computed:{


//计算得到当前分类的下标
  currentIndex(){//初始和相关数据发生了变化
  //先得到相关的条件数据
  const {scrollY,tops} = this;
  //根据条件计算产生一个结果
  const index = tops.findIndex((top,index)=>{
     return scrollY >= top && scrollY < tops[index+1]
  })
  //返回结果
  return index
  }
}

methods:{


//初始化滚动
_initScroll(){
    //列表显示之后创建
    new BScroll('.menu-wrapper'{
    click:true
    });
    this.foodsScroll = new BScroll('.foods-wrapper',{
    probeType:2//惯性的滑动不会触发
    click:true
    })
   })
   //给右侧绑定scroll监听
   this.foodsScroll.on('scroll',({x,y})=>{
   //console.log(x,y);//x,y,代表横轴和纵轴的坐标
   this.scrollY = Math.abs(y);
   })
   
   //给右侧列表绑定scroll结束的监听
  this.foodsScroll.on('scrollEnd',({x,y})=>{
   console.log(1111,x,y);
   this.scrollY = Math.abs(y)
   })
}


//初始化tops
const tops = [];
let top = 0;
tops.push(top);
//找到所有分类的li
const lis =this.$refs.foodsUl.getElementByClassName('food-list-hook');
Array.prototype.slice.call(lis).foeEach(li=>{
top += li.clientHeight;
tops.push(top);
})
//更新数据
this.tops = tops;


//左侧点击事件
cilckMenuItem(index){
   //右侧列表滑动到对应的位置,编码的方式滑动
   //得到目标位置的scrollY
   const scrollY = this.tops[index];
   //立即更新scrollY(让点击的分类项,成为当前分类)
   this.scrollY = scrollY;
   //平滑滚动右侧列表
   this.foodsScroll.scrollTo(0,-scrollY,300)
   }
}

18、已经有数据绑定的数据中添加一个新的属性,让其也有数据绑定,利用Vue.set()方法可以实现

19、界面不正常去看数据,看看数据是不是和我们想的是不是一样的;

20、移动端的组件库:mint-ui

21、评价列表中过滤得到新数组

(1)条件1

selectType:0/1/2/

rateType:0/1

selectType === 2||selectType === rateType

(2)条件2

onlyShowText : true/false

text:有值/没值

!onlyShowText || text.length > 0

return rating.filter(rating =>{
  const {rateType,text} = rating
  return (selectType === 2 || selectType === rateType ) && (!onlyShowTxt || text.lenngth >0)
})

22、图片懒加载

下载npm i --save vue-lazyload

23、日期格式化过滤器

npm i --save moment

filters.js
import Vue from 'vue'
import moment from 'moment'
Vue.filter('date-format',funtion(value)={
return moment(value).format('YYYY-MM-DD HH:mm:ss')
})

24、打包文件分析与优化

(1)vue脚手架提供了一个用于可视化分析打包文件的包webpack-bundle-analyzer和配hi

(2)启用打包可视化:npm run build --report

(3)npm i --save date-fns

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
项目源码rar+百度云盘视频链接 项目描述: 01_vue项目_项目功能演示.avi 02_Vue项目_项目开发准备.avi 03_Vue项目_创建项目并运行.avi 04_Vue项目_资源准备.avi 05_Vue项目_项目源码目录设计.avi 06_Vue项目_stylus使用.avi 07_Vue项目_组件化编码.avi 08_Vue项目_引入vue-router.avi 09_Vue项目_FooterGuide组件.avi 10_Vue项目_各导航路由组件(静态).avi 11_Vue项目_HeaderTop组件.avi 12_Vue项目_使用swiper实现商品分类列表轮播.avi 13_Vue项目_ShopList组件(静态).avi 14_Vue项目_Login组件(静态).avi 15_Vue项目_启动后台应用并测试接口.avi 16_Vue项目_封装ajax请求函数.avi 17_Vue项目_封装接口请求函数.avi 18_Vue项目_使用git对项目进行本控制.avi 19_Vue项目_复习.avi 20_Vue项目_配置代理实现跨域ajax请求.avi 21_Vue项目_创建vuex的整体结构.avi 22_Vue项目_使用vuex管理首页数据.avi 23_Vue项目_异步显示当前地地址.avi 24_Vue项目_异步显示食品分类轮播列表.avi 25_Vue项目_使用watch和$nextTick解决轮播的bug.avi 26_Vue项目_异步显示商家列表.avi 27_Vue项目_使用svg显示加载中提示界面.avi 28_Vue项目_Star组件.avi 29_Vue项目_注册登陆功能演示说明.avi 30_Vue项目_登陆界面效果1_切换登陆方式.avi 31_Vue项目_登陆界面效果2_手机号检查.avi 32_Vue项目_登陆界面效果3_倒计时效果.avi 33_Vue项目_登陆界面效果4_切换密码的显示和隐藏.avi 34_Vue项目_登陆界面效果5_前台表达验证.avi 35_Vue项目_复习.avi 36_Vue项目_动态一次性图形验证码.avi 37_Vue项目_定义接口请求函数.avi 38_Vue项目_登陆_发送短信验证码.avi 39_Vue项目_登陆_完成登陆请求.avi 40_Vue项目_登陆_保存用户信息到vuex.avi 41_Vue项目_登陆后更新个人中心界面.avi 42_Vue项目_登陆更新跳转路由.avi 43_Vue项目_自动登陆.avi 44_Vue项目_退出登陆.avi 45_Vue项目_搭建商家整体界面.avi 46_Vue项目_json的理解.avi 47_Vue项目_设计json数据.avi 48_Vue项目_使用mockjs模拟接口数据.avi 49_Vue项目_ajax请求mockjs模拟的接口.avi 50_Vue项目_ShopHeader组件.avi 51_Vue项目_复习.avi 52_Vue项目_异步显示goods数据.avi 53_Vue项目_滑动效果分析.avi 54_Vue项目_使用better-scroll实现回弹滑动.avi 55_Vue项目_收集scrollY.avi 56_Vue项目_收集tops.avi 57_Vue项目_滑动右侧列表更新当前分类.avi 58_Vue项目_解决惯性滑动不更新当前分类的bug.avi 59_Vue项目_点击分类项滑动右侧列表.avi 60_Vue项目_CartControl组件1.avi 61_Vue项目_CartControl组件2.avi 62_Vue项目_Food组件1.avi 63_Vue项目_Food组件2.avi 64_Vue项目_ShopCart组件1.avi 65_Vue项目_ShopCart组件2.avi 66_Vue项目_显示购物项列表.avi 67_Vue项目_解决列表显示的3个bug.avi 68_Vue项目_复习.avi 69_Vue项目_购物车动画.avi 70_Vue项目_购物车列表的滑动.avi 71_Vue项目_清空购物车.avi 72_Vue项目_ShopRatings组件1.avi 73_Vue项目_ShopRatings组件2.avi 74_Vue项目_ShopInfo组件1.avi 75_Vue项目_ShopInfo组件2.avi 76_Vue项目_ShopInfo组件3.avi 77_Vue项目_Search组件.avi 78_Vue项目_缓存路由组件对象.avi 79_Vue项目_路由组件懒加载.avi 80_Vue项目_图片懒加载vue-lazyload.avi 81_Vue项目_使用moment实现日期过滤器.avi 82_Vu

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值