前端设置代理解决跨域问题
server: {
proxy: {
'/api': 'http://39.98.123.211'
}
},
对 axios 进行封装
// 对axios二次封装
import axios from 'axios'
// const axios = require('axios')
// 利用axios的create方法,传入配置对象创建一个axios实例
const requests = axios.create({
baseURL: '/api',
timeout: 5000
})
// 配置请求拦截器
requests.interceptors.request.use((config)=>{
// config对象中包含headers
return config
})
// 配置响应拦截器,传入成功与失败的回调
requests.interceptors.response.use((res)=>{
// 服务器成功返回数据可以被响应拦截器收到
return res.data
}, (err)=>{
return Promise.reject(new Error('faile'))
})
export default requests
统一管理接口
// 统一管理api接口
import requests from './request'
// 三级联动接口
export const reqCategoryList = () => {
// requests本质是axios对象, 返回结果是Promise对象
return requests({
url: '/product/getBaseCategoryList',
method: 'get'
})
}
使用 nprogress 插件实现发送请求时显示进度条
在封装 axios 的文件中引入 nprogress
在请求拦截器和响应拦截器中调用start() 和 done()
vuex
vuex 是vue项目的状态管理库
管理组件公用的数据
根目录新建 store 文件夹
创建 index.js 文件 引入 Vue Vuex Vue.use(Vuex)
// 创建并暴露Store实例 在入口文件引入
vuex可以进行模块式开发
在每个模块中配置 state mutations actions getters 对象 并对外暴露 放到store入口文件统一管理
vue3 + vite 项目 使用vuex
import { createStore } from 'vuex' // 创建并暴露Store实例 export default createStore({ // 仓库的数据 state: {}, // 修改数据的唯一方式 mutations: {}, // 业务逻辑,处理异步 actions: {}, // 简化仓库数组,类似计算属性 getters: {} })
在组件中使用
import { mapState } from 'vuex'
computed: {
// 注意 ''
...mapState(['count'])
},
模块化
获取模块仓库中的数据 computed: { ...mapState({ count: state => state.home.count }) },
事件委派
把触发事件放到父元素身上 利用自定义属性向回调函数传递参数
用 event 对象获取触发事件的节点 event.target
用节点的dataset属性 获取自定义属性和属性值
JS 控制显示与隐藏
函数防抖 函数节流
实现方式 闭包+延迟器
函数防抖
前面所有被触发的事件取消,规定时间之后才会执行最后一次触发的事件
函数节流
事件触发一次后,在规定时间间隔内不会再次触发
lodash.js 插件
在挂载后通过路由决定组件内容展示与否 修改响应式数据
过渡动画
节点要有 v-show 或 v-if 节点要被 transition 标签包裹 可以给 transition 标签添加 name 属性,在设置样式时直接用 [name]-enter-from [name]-enter-to [name]-enter-active