VUE3笔记

本文详细介绍了Vue3项目的各个方面,包括文件结构、生命周期管理、响应式API(reactive和ref)、计算属性、watch、路由设计、数据传递、axios集成、支付功能、会员中心等内容,旨在帮助开发者理解和实践Vue3的新特性和最佳实践。
摘要由CSDN通过智能技术生成

day1 

 1.项目目录和关键文件 
 项目目录:

 关键文件:

 2.相对于vue2格式上的改变
 setup选项的写法和执行时机

 生命周期图:

在组件渲染的时候会优先执行setup函数,执行时机在beforeCreate之前,自动执行。

 语法糖:减少代码量


总结 :

3.组合式API--reactive和ref函数
reactive()
作用

 核心步骤

 ref()
 作用
 核心步骤

 修改ref产生的响应式数据对象  必须通过.value,如下所示

总结 

4.computed计算属性函数

总结

5.watch函数

作用:侦听一个或多个数据的变化,数据变化时执行回调函数。

两个额外的参数:1.immediate(立即执行),2.deep(深度侦听)

基础使用-侦听单个数据

基础使用-侦听多个数据

 代码过程

immediate

deep

当你修改对象的某个属性的时候,watch是不会侦听修改操作的,如果想要执行,需要在deep中打开。

 精确侦听对象的某个属性

在绝大多数情况下不要开启deep,会有性能损耗。

Vue3的生命周期API(选项式VS组合式)

小结

组合式API下的父传子
基本思想

实现代码

组合式API下的子传父
基本思想

实现代码

小结

day2

模板引用的概念

通过ref标识获取真实的dom对象或者组件的实例对象

如何使用(以获取dom为例 组件同原理)

代码实现

DefineExpose()

总结:

组合式API--provide和inject
作用和场景

跨层传递普通数据

代码实现

跨层传递方法

总结

项目
列表渲染

实现代码

上面的async  和  await 是同步异步请求  

这里不是同步 async await 是异步的 只是他会等待这个请求响应之后继续执行后续代码

注意事项

删除功能

代码实现

上面的row可以拿到id,是根据el-plus的具体内容拿到的

编辑功能
1.打开弹框(获取子组件实例 调用方法或者修改属性)

代码实现

第一次没有实现弹窗是因为没有导入defineExpose,视频课程中并没有导入,以后记得注

意!

2.回填数据(调用详情接口/当前行的静态数据)

代码实现

3.更新数据

代码实现

 day3

axios配置

axios是什么

代码实现

测试接口

总结

项目路由设计

代码实现

设计分类页和默认Home页路由

代码实现

二级路由出口

总结

静态资源初始化
图片资源和样式资源

配置好后要在main.js中引入样式文件

scss文件自动导入
为什么要自动导入

免去手动配置的繁琐,项目启动直接使用。

layout-静态模板结构搭建

先创建3的个板块

再在主页面配置

Layout字体图标引入
如何引入

代码实现

引入的是阿里的图标库

一级导航渲染

代码实现

layout吸顶导航交互实验

获取滚动距离需要安装VueUse插件      安装命令为 npm i @vueuse/core

然后搜索useScroll

代码实现

layout--Pinia优化重复请求
为什么要优化

实现代码

day4

Home整体结构搭建和分类实现
Home模块入口组件中引入并渲染

实现代码

<script setup>
import HomeCategory from './components/HomeCategory.vue'
import HomeBanner from './components/HomeBanner.vue'
import HomeNew from './components/HomeNew.vue'
import HomeHot from './components/HomeHot.vue'
import homeProduct from './components/HomeProduct.vue'
</script>

<template>
  <div class="container">
    <HomeCategory />
    <HomeBanner />
  </div>
  <HomeNew />
  <HomeHot />
  <homeProduct />
</template>

Home-banner轮播图功能实现

首先引入banner轮播图接口

Home中代码实现

Home面板组件封装
场景说明

组件封装

代码实现

总结

Home-新鲜好物和人气推荐实现
新鲜好物实现

代码实现,首先定义接口

然后去新鲜好物页面,记得引入HomePanel

HomePanel里面试衣镜封装好的,直接拿过来用就可以了

人气推荐也是同理,记得去官方资料里面去复制接口和模板

Home图片懒加载
场景和指令用法

实现思路和步骤

代码实现

Home-懒加载指令优化
为什么要优化

实现代码

重复监听问题

Home-Product产品列表实现
Product产品列表

代码实现,记得用上懒加载

Home-GoodsItem组件封装
如何封装

代码实现

一级分类-整体认识和路由配置

代码实现

一级分类-面包屑导航渲染

实现效果

代码实现(报错不用管系统错误)

一级分类-banner轮播图实现
分类轮播图实现

 代码实现

一级分类-激活状态显示和分类列表渲染、
激活状态显示

代码实现

分类列表渲染

一级分类-解决路由缓存问题
什么是路由缓存问题

这种方法会存在重复加载banner。

总结

一级分类-使用逻辑函数拆分业务
概念理解

实现步骤

核心思想总结

day5

二级分类-整体认识和路由配置

代码实现

二级分类-面包屑导航实现

准备接口

/**
 * @description: 获取二级分类列表数据
 * @param {*} id 分类id 
 * @return {*}
 */

export const getCategoryFilterAPI = (id) => {
  return request({
    url:'/category/sub/filter',
    params:{
      id
    }
  })
}

代码实现

二级分类-商品列表实现

准备接口

/**
 * @description: 获取导航数据
 * @data { 
     categoryId: 1005000 ,
     page: 1,
     pageSize: 20,
     sortField: 'publishTime' | 'orderNum' | 'evaluateNum'
   } 
 * @return {*}
 */
export const getSubCategoryAPI = (data) => {
  return request({
    url:'/category/goods/temporary',
    method:'POST',
    data
  })
}

代码实现

添加筛选参数实现筛选功能

代码实现

列表无限加载

代码实现

day6

二级分类-定制路由scrollBehavior

 定制路由行为就是在切换新的二级页面的时候,让滚动条不在原来的位置,而是在最上面的位置。

代码实现

详情页-整体认识和路由配置
路由配置(是二级分类下面的)

代码实现

详情页-基础数据渲染
基础数据渲染

错误原因(看注释)

根据解决方法选择了v-if,但是跟着教程写会报错

需要在brand后面加上?   因为获取的是brand里面的name,而不是整个brand。如果用?.后续都要用,所以还是用v-if方便。

然后根据网页结构去替换对应的数据,变为动态显示

遍历图片

详情页-热榜区域实现

封装Hot热榜组件

获取渲染基础数据
封装接口
/**
 * 获取热榜商品
 * @param {Number} id - 商品id
 * @param {Number} type - 1代表24小时热销榜 2代表周热销榜
 * @param {Number} limit - 获取个数
 */
export const fetchHotGoodsAPI = ({ id, type, limit = 3 }) => {
  return request({
    url:'/goods/hot',
    params:{
      id, 
      type, 
      limit
    }
  })
}

实现代码

模块实现整体分析
适配不同标题Title

根据接口文件里面的参数进行传参

 * @param {Number} type - 1代表24小时热销榜 2代表周热销榜

代码实现

适配不同列表内容

把type:1改为

详情页-图片预览组件封装
组件功能分析
通过小图切换大图实现

维护一个激活的index

放大镜效果实现

功能拆解

放大镜效果实现-滑块跟随鼠标移动

控制滑块跟随鼠标移动

代码实现

day7

放大镜效果实现-大图效果实现

实现代码

上面的图片路径要把 0换为

这样就可以是动态的图片了

组件props适配

实现代码

//props适配图片列表
defineProps({
  imageList:{
    type: Array,
    default:()=>[]
  }
})

然后在

把显示图片改为属性绑定

总结

详情页-SKU组件
SKU的概念

SKU组件使用

代码实现

首先去资料里面导入XtxSku文件包,然后在

详情页-通用组件统一注册全局
为什么要优化

插件的逻辑代码

然后去main.js里面去注册

利用插件化手段,把他们进行一个全局注册,省去引用的步骤。

登录-整体认识和路由配置
整体认识

首先去配套文件内复制准备模板。

代码实现

登录-表单校验实现
为什么要校验

表单如何进行校验
表单校验步骤

代码实现

表单校验-自定义校验规则
自定义校验规则

如果默认配置不能满足需求,就要用自定义的校验逻辑,通过时调用函数,不通过时也要调用函数,只不过要new 一个新的Error出来

整个表单的验证

 

代码实现

登录-基础登录业务实现

登录业务流程

1.提示用户

首先在apis文件夹加上一个接口user.js

//封装所有和用户相关的接口函数
import request from '@/utils/http'

export const loginAPI = ({account,password}) => {
    return request({
        url:'/login',
        method:'POST',
        data:{
            account,
            password
        }
    })
}

把接口导入到登录页面的位置

代码实现

2.跳转页面

去拦截器里面统一拦截,统一错误提示(这样配置一次多个接口都可以实现)。所用的样式哪里使用哪里就引入。

登录-Pinia管理用户数据
为什么要用pinia管理数据

如何使用pinia管理数据

代码实现(首先在store里面穿件新的user.js)

然后引入我们的登录页面

把之前的代码删除,用调用action函数替换

关键代码总结

登录-Pinia用户数据持久化
持久化用户数据说明

关键步骤总结和插件运行机制

代码实现

day8

登录-登录和非登录状态的模板适配
需求理解

多模板适配的通用思路

实现代码

登录-请求拦截器携带Token
为什么要在请求拦截器携带token

如何配置

代码实现

登录-退出登录功能实现
退出登录业务实现

代码实现

登录-Token失效401拦截
业务背景

代码实现

购物车功能实现
购物车业务逻辑拆解

本地购物车-加入购物车实现

代码实现

本地购物车-头部购物车列表渲染

首先创建新的组件HeaderCart.vue,然后引入LayoutHeader。

本地购物车-头部购物车删除实现

代码实现

本地购物车-头部购物车统计计算
计算逻辑

代码实现

本地购物车-列表购物车
列表购物车-基础内容渲染

首先在view下创建新的CartList,然后去router里面配置路由,还是在children下面。

实现代码

最后在CartList里面的index.vue中导入数据

day9

列表购物车-单选功能

实现代码

列表购物车-全选
核心思路

1.单选功能实现

2.全选功能实现

购物车列表-统计数据实现

接口购物车
接口购物车-整体业务流程回顾

接口购物车-加入购物车

实现逻辑

实现代码

首先创建新的接口

再去判断是否登录(是否有token),

删除购物车
删除购物车-删除购物车

首先去封装删除的接口

//封装删除接口
export const delCartAPI = (ids) => {
    return request({
        url:'/member/cart',
        method:'delete',
        data: {
            ids
        }
    })
}

实现代码

退出登录-清空购物车列表
业务需求

实现代码

合并购物车到服务器

合并购物车业务实现

结算模块-路由配置和基础数据渲染
路由配置和基础数据渲染

代码实现

结算模块-地址切换交互实现
地址切换交互需求分析

 打开弹框交互实现

去配套文件里面复制准备弹框组件

代码实现

地址激活交互实现

点击实现激活样式实现代码

选中后覆盖原来的地址代码实现

关闭弹窗代码实现

总结

订单模块-生成订单功能实现
业务需求说明

准备支付页路由去配套文件中复制然后去router中配置。

接口封装代码实现

点按钮调用接口,得到订单Id,携带id完成路由跳转代码实现

day10

支付模块-渲染基础数据
渲染基础数据

代码实现

这里出现了一个错误,就是获取不到route.query.id。是在Checkout里面写错了

这样就没问题了

支付模块-实现支付功能

支付业务流程

实现代码

// 支付地址
const baseURL = 'http://pcapi-xiaotuxian-front-devtest.itheima.net/'
const backURL = 'http://127.0.0.1:5173/paycallback'
const redirectUrl = encodeURIComponent(backURL)
const payUrl = `${baseURL}pay/aliPay?orderId=${route.query.id}&redirect=${redirectUrl}`
支付模块-支付结果展示
业务需求理解

由于该项目给提供的账号里面没有钱了,网页一直报错

支付模块-封装倒计时函数
理解需求

实现思路分析

实现代码

装一个格式化的插件  dayjs

实现代码

会员中心-整体功能梳理和路由配置
整体功能梳理

路由配置(包括三级路由)

首先去配套文件里把两个页面准备好,然后去router里面配置三级路由

实现代码

汇演中心-个人中心信息渲染
业务需求分析实现

实现代码

会员中心 - 我的订单
订单基础列表渲染

封装接口

代码实现

tab切换实现

代码实现

分页逻辑实现

实现代码

代码实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值