目录
  1. 1. 1 Home模块组件拆分
  2. 2. 2 三级联动组件
  3. 3. 3 完成其余Home下的静态组件:
  4. 4. 4 POSTMAN测试接口
  5. 5. 5 axios二次封装
    1. 5.1. 5.1为什么需要进行二次封装axios?
    2. 5.2. 5.2在项目当中经常看到API文件夹【axios】
  6. 6. 6 接口统一管理
    1. 6.1. 6.1跨域问题
  7. 7. 7 nprogress进度条使用
  8. 8. 8 vuex状态管理库
    1. 8.1. 8.1vuex是什么?
    2. 8.2. 8.2vuex基本使用
    3. 8.3. 8.3vuex实现模块式开发
    4. 8.4. 9 完成TypeNav三级联动展示数据业务
电商项目--day2

1 Home模块组件拆分

–先把静态页面完成 完成
–拆分出静态组件:
三级联动||
–获取服务器数据进行展示
–动态业务

2 三级联动组件

—由于三级联动,在Home,Search,Detail都出现过,把其注册为全局组件。
好处:只需要注册一次,就能在全局使用。

3 完成其余Home下的静态组件:

HTML+CSS+图片资源 【结构 样式 图片资源】

4 POSTMAN测试接口

–经过测试,接口没有问题
–返回code:200,成功
–整个项目,接口前缀都有/api字样

5 axios二次封装

XMLHTTPRequest,fetch,JQ,axios
在request中封装axios,然后暴露接口,然后在另一个index.js文件中引入,模块化开发,便于管理

5.1为什么需要进行二次封装axios?

请求拦截器:考研在发送请求之前可以处理一些业务
相应拦截器:当服务器数据返回之后,可以处理一些业务

5.2在项目当中经常看到API文件夹【axios】

接口当中路径当中带有/api
baseURL:’/api’ 默认带有/api
http://xxx.xxx:8000/api
封装方法如下

//1:利用axios对象的方法create,去创建一个axios实例
//2:request就是axios,只不过需要稍微配置一下

const requests = axios.create({
//配置对象
// 基础路径,发请求的时候,路径当中会出现api
baseURL:'/api',
//代表请求超时的时间50000
timeout:5000,

})
//请求拦截器:在发请求之前,请求拦截器可以检测到,可以在请求发出去之前做一些事情
requests.interceptors.request.use((confirm)=>{
//confirm:配置对象,有一个属性很重要,header请求头
return confirm;
})

//响应拦截器
requests.interceptors.response.use((res)=>{
//成功的回调函数:服务器响应数据回来以后,响应拦截器可以检测到,可以做一些事情
return res.data;
},(error)=>{
//响应失败的回调函数
return Promise.reject(new Error('fail'));
})

6 接口统一管理

–项目小:完全可以在组件的生命周期函数中发请求,mouted等
–项目大:axios.get('xxx')麻烦,
在index.js中的封装一个对外的接口来处理相应的需求

6.1跨域问题

什么是跨域:协议、域名、端口号不同的请求,称之为跨域
http://0.0.0.0:8080/#/home —前端项目的本地服务器
http://gmall-h5-api.atguigu.cn —后台服务器
JSONP、CROS、代理

proxy代理

7 nprogress进度条使用

-start:进度条开始
-done:进度条结束
进度条的颜色在css文件中的.bar样式中修改

8 vuex状态管理库

8.1vuex是什么?

vuex是官方提供的一个插件,状态管理库,集中式管理项目中组件中共用的数据
切记,并不是全部项目都需要vuex,如果项目很小,完全不需要vuex,反之,项目很大,组件很多,数据很多,数据维护很费劲
state
mutaions
actions
getters
modules

8.2vuex基本使用

//h5:
<button @click='add'> 点我+1</button>
<span>仓库的数据{{count}}</span>
<button>点我-1</button>
//vue文件中:
import { mapState } from "vuex";

computed:{
...mapState(['count'])
},
methods:{
add(){
// 派发action
this.$store.dispatch('add');
},
},

//index.js(vuex):
const state = {
count:1,
};
// mutations:修改state的唯一手段
const mutations = {
ADD(state){
state.count++;
}
};
// actions:处理action,可以书写自己的业务逻辑,也可以处理异步
const actions = {
// 这里可以修改业务逻辑,但是不能修改state
add({commit}){
commit('ADD');
}
};
// getters:理解为计算属性,用于简化仓库数据,让组件获取仓库的数据更加方便
const getters = {};
//对外暴露store类的一个实例
export default new Vuex.Store({
state,
mutations,
actions,
getters
});

8.3vuex实现模块式开发

如果项目过大,组件过多,接口也很多,数据也很多,可以让vuex实现模块式开发

模拟state存储数据 使用modules实现模块式开发

// 引入小仓库
import home from "./home";
import search from "./search";
//对外暴露store类的一个实例
export default new Vuex.Store({
modules:{
home,
search
}
});

9 完成TypeNav三级联动展示数据业务

[
{
id:1, //一级分类
name:'电子书',
child:[
{id:1, //二级分类
name:'佩奇',
child:[{
id:1, //三级分类
name:'灰太狼'
}]}
]
}
]
文章作者: ruqiuvy
文章链接: https://github.com/yiyeruqiuvy/2022/04/28/%E7%94%B5%E5%95%86%E9%A1%B9%E7%9B%AE-day2/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 一夜入秋非生之所
打赏
  • 微信
  • 支付寶

评论