Mytu's BlogMytu's Blog
Home
XH蒜花
语雀
Github
Home
XH蒜花
语雀
Github
  • 欢迎光临

    • 关于我
  • 基础总结

    • HTML
    • CSS
    • JavaScript
      • ES6
    • TypeScript
    • JQuery
    • Vue2
      • Vue
      • Vuex
      • 基础
      • 进阶
      • 实战
    • Vue3
      • 基础
      • 实战
    • React
    • Uni-app
    • 小程序
      • 实战
    • NodeJs
    • Git
    • MySql
    • Webpack
    • Other
  • 前端面试

    • 八股文
  • Free Style

    • 中午吃什么?

Vue2实战2Vue2实战3

  1. 简单说一下微信扫码登录的业务逻辑
  • 首先,微信用户向第三方应用发送登录请求,第三方应用就会去向微信开放平台请求一个微信二维码的登录授权。接着,微信开放平台就会向用户发出请求确认,当用户点击确认允许的时候,就会告知微信开放平台。此时,微信开放平台就会让页面重定向到第三方指定链接,并会在重定向url上带一个临时票据code。
  • 前端开发将code传给后端处理,后端开发传递状态码指示前端人员后续的操作,积分商城有3种情况,分别是0(表示之前绑定过手机号),400(表示二维码失效,及code失效,例如之前扫过该二维码,过期等),407(表示第一次访问积分商城,微信还没和手机账号进行绑定)。
    1. 如果状态码是0的话
      1. 提示成功
      2. 本地存储token【后端利用code去向微信开放平台拿的】
      3. 更新登录状态
      4. 清除地址栏code
    2. 如果状态码是400的话
      1. 提示用户二维码已经失效
      2. 打开登录模态框 - 引导用户再重新扫码
    3. 如果状态码是407的话
      1. 提示用户再进行一次手机号登录 -- 关联微信
      2. 打开登录模态框 - 引导用户登录
      3. 先存储uuid
      4. 清除地址栏code
  • 去到Login.vue中继续进行关联操作
    • 根据本地是否有uuid
      • 有,调用BindWXAPI({手机号,验证码,uuid}) 绑定成功后 返回code0,并且把uuid删除了
      • 无,调用PhoneReginAPI(普通登录请求),绑定成功后 返回code0
    • 登录返回code0 表示登录成功
      1. 提示登录成功
      2. 本地存储token ,后续需要用到
      3. 自动关闭掉登录模态框
      4. topbar中登录按钮要变成购物车按钮。(登录状态)
      5. 把uuid删除了【已无用】
  • 这是一个PC端大型企业电商项目,采用了Vue2.6全家桶技术栈实现的,包含了vue-cli、vuerouter、vuex、axios等,主要有注册登录、商品管理、分类、购物车、个人中心等模块。
  • 该项目使用了axios进行数据请求,为了方便组件使用,对axios进行了封装。
    • 为了统一设置请求的路径,设置baseUrl来统一接口服务器地址
    • 为了统一处理发送请求时,需要携带一些公共参数(如token),添加请求拦截器
    • 为了统一处理服务器响应回的数据,需要对数据进行二次处理(如响应拦截器
    • 为了统一管理接口地址,新建api.js来封装请求地址
  • 有使用,async+await是一个用同步思维解决异步问题的方案,有效避免回调地狱。
    • async是一个加在函数前的修饰符,被async定义的函数会默认返回一个Promise对象resolve的值。因此对async函数可以直接then,返回值就是then方法传入的函数。
    • await 也是一个修饰符,只能放在async定义的函数内。可以理解为等待。
      • await 修饰的如果是Promise对象:可以获取Promise中返回的内容(resolve或reject的参数),且取到值后语句才会往下执行;
      • 如果不是Promise对象:把这个非promise的东西当做await表达式的结果。
  1. 先验证手机号格式是否正确
  2. 再验证滑动板块是否验证成功【插件实现】
    1. 官方文档
    2. 下载插件 npm i xxxxx
    3. 引入插件 main.js
    4. 使用组件(官网案例)
    5. 修改的参数,更新样式 。 /deep/
  3. 以上都正确就请假axios发送验证码请求,发送请求成功后,开始60秒倒计时,禁用按钮
  4. 获取验证码后点击登录按钮,对用户输入的验证码和后台发送过来的信息比对是否一致,一致则登录成功
  • 参考上文
  • 渲染微信扫码的步骤:
    1. 在public文件里面的index.html引入微信官方文件
    2. Login.vue组件里面,加id="weixin"的容器, 并new一下第一步导入的对象(复制官网代码)
    3. 修改二维码默认样式,需要通过工具包data-url.js文件,将css文件转换base64格式,粘贴到官方提供微信组件里面的 href属性中
  • 背景:项目中多处使用alert提示,就很有必要

  • ranction标签实现淡入淡出的动画效果。
  • 具体操作参考以下笔记:

       1. 项目中在App.vue中引入Toast.vue 
    
       2. 复制基本样式结构
    
       3. 引入字体样式 (public.less) 
    
       [打开页面检查是否正常显示Toast组件]
    
       控制提示框显示和隐藏  v-show="是否显示提示框"
    
       多个组件都可能会修改 是否显示提示框 ,隐藏将是否显示提示框 变量存储到vuex中。
    
       4. 去vuex中添加showToast ,新增 isShowToast
    
        (回忆三个步骤)
    
       5.App.vue中获取vuex中变量isShowToast
    
         mapState({组件内的属性名:state=>state.模块名.属性名})
    
       6.拿Login.vue测试,显示出提示框,自动隐藏
    
         调用 changeIsShowToast 方法 显示 改为true  ,
    
         隐藏就是false
    
       [测试能够弹出提示信息以及自动关闭提示信息]
    
       需求:不同的地方调用时提示不同的信息。显示不同的提示图标
    
       1. 将需要变化的数据存放在vuex中
    
          提示信息 toastMsg
    
          提示信息 toastType: success,danger,warning 
    
       2. Toast.vue中获取vuex中数据。
    
          根据toastType 动态绑定样式。
    
       3. Login.vue中传递msg和type
    
          this.changeIsShowToast({
    
              isshow:true,
    
              msg:'请输入正确的手机号码',
    
              type:'danger'
    
          });
    
       [检查提示框组件内容,可以根据vuex中数据显示不同的信息]   
    
       需求:优化在显示提示框方法中自动关闭提示框
    
       1. actions里增加方法
    
          方法内调用mutations显示提示框,2s后又调用mutations关闭提示框
    
       2. Login组件中,删除之前的changeIsShowToast方法的调用
    
          改为直接调用actions内的方法
    
Prev
进阶