04-个人中心-mock数据
目的:mockjs基本使用
mockjs
可以模拟可更快的得到较为真实的数据,且可以拦截axios的接口调用,让我们的代码实现了调用接口的逻辑且得到模拟的数据,保存业务完整度。当然模拟数据有一定的规则请参考: http://mockjs.com/
目标:模拟 /my/test
接口,随机返回点数据。
基本使用步骤:
1.安装
npm i mockjs
2.配置 src/mock/index.js
import Mock from 'mockjs'
// mock的配置
Mock.setup({
// 随机延时500-1000毫秒
timeout: '500-1000'
})
3.使用 src/main.js
import 'normalize.css'
import '@/assets/styles/common.less'
+ import './mock'
4.模拟接口,拦截请求
// 拦截请求,
// 第一个参数:url,使用正则去匹配
// 第二个参数:请求方式
// 第三个参数: 生成数据的函数
Mock.mock(/\/my\/test/, 'get', () => {
return { msg: '请求测试接口成功', result: [] }
})
5.生成随机数据
// 单个数据
Mock.mock('@integer(0,7)')
// 对象数据
Mock.mock({
id: '@id',
name: '@ctitle(2,4)'
})
具体规则:http://mockjs.com/examples.html
05-个人中心-模拟接口
目的:使用mockjs模拟我的收藏,我的足迹接口,完成渲染。
大致步骤:
- 定义API接口函数
- 准备mock的接口拦截
- 获取数据渲染
落地代码:
- API函数
src/api/index.js
import request from '@/utils/request'
/**
* 获取收藏分页数据
* @param {Integer} collectType - 收藏类型,1为商品,2为专题,3为品牌
* @returns
*/
export const findCollect = ({ page = 1, pageSize = 10, collectType = 1 }) => {
return request('/member/collect', 'get', { page, pageSize, collectType })
}
- mock拦截
import qs from 'qs'
// 模拟 我的收藏
Mock.mock(/\/member\/collect/, 'get', config => {
const queryString = config.url.split('?')[1]
const queryObject = qs.parse(queryString)
const items = []
for (let i = 0; i < +queryObject.pageSize; i++) {
items.push(Mock.mock({
id: '@id',
name: '@ctitle(10,20)',
desc: '@ctitle(4,10)',
price: '@float(100,200,2,2)',
// http://zhoushugang.gitee.io/erabbit-client-pc-static/uploads/clothes_goods_7.jpg
picture: `http://zhoushugang.gitee.io/erabbit-client-pc-static/uploads/clothes_goods_${Mock.mock('@integer(1,8)')}.jpg`
}))
}
return {
msg: '获取收藏商品成功',
result: {
counts: 35,
pageSize: +queryObject.pageSize,
page: +queryObject.page,
items
}
}
})
- 获取数据渲染
// 调用模拟的接口
const collectGoods = ref([])
findCollect({
page: 1,
pageSize: 4
}).then(data => {
collectGoods.value = data.result.items
})
return { goods, collectGoods }
<HomePanel title="我的收藏">
+ <GoodsItem v-for="item in collectGoods" :key="item.id" :goods="item" />
</HomePanel>
足迹接口,可以自己练习下。
06-个人中心-菜单激活
目的:动态激活左侧菜单
大致步骤:
- 添加个人中心路由地址,设置精准匹配类名
- 添加我的订单路由与组件
router-link-active 当你的路由路径包含 router-link组件的to属性值,当前组件会加上它
router-link-exact-active 当你的路由路径完全和你的router-link组件的to属性值一致,当前组件会加上它
注意:vue3.0 router-link-active 加不上,路由路径包含 且 需要又路由嵌套关系。
- 例如:
/member /member/other
但是不是嵌套路由,不会加上这个类 router-link-active
src/components/app-member-aside.vue
<h4>我的账户</h4>
<div class="links">
+ <RouterLink to="/member" exact-active-class="active">个人中心</RouterLink>
<a href="javascript:;">消息通知</a>
<a href="javascript:;">个人信息</a>
<a href="javascript:;">安全设置</a>
<a href="javascript:;">地址管理</a>
<a href="javascript:;">我的积分</a>
<a href="javascript:;">我的足迹</a>
<a href="javascript:;">邀请有礼</a>
<a href="javascript:;">幸运抽奖</a>
</div>
<h4>交易管理</h4>
<div class="links">
+ <RouterLink to="/member/order" exact-class="active">我的订单</RouterLink>
<a href="javascript:;">优惠券</a>
src/router/index.js
const MemberOrder = () => import('@/views/member/order')
{
path: '/member/order/',
// vue3.0 需要有嵌套关系才能模糊匹配
component: { render: () => h(<RouterView/>) },
children: [
{ path: '', component: MemberOrder },
{ path: ':id', component: MemberOrderDetail }
]
}