项目介绍
该项目基于vue-cli
快速创建vue工程化项目,并结合使用vant组件库
来完成。
项目展示:
1.搭建项目
1.使用vue-cli创建vue项目
2.选择一个预设,这里选Manually select features(手动选择功能)
3.选择项目所需功能
4.选择项目使用的vue版本
5.选择n,不需要用路由历史模式
6.选择css预处理器,这里选择less
7.选择标准的Eslint配置
8.选择Lint on save
9.将Babel,Eslint文件放在单独的配置文件中
10.vue项目创建成功
2.项目准备
1.Vscode中打开项目
2.安装vant
组件库
3.在main.js
中引入vant组件库
4.初始化项目结构,使用vant组件库
5.运行npm run serve
,引入vant组件库成功
3.创建项目相关组件
1.在views
文件夹下,创建Home.vue
,User.vue
views
文件夹下存放的vue
组件,是需要通过路由
来控制的组件
发现报错提示组件名称错误:
在.eslintrc.js
中,自定义规则
2.在App根组件中,添加路由占位符
3.选择Vant官网的,选择导航组件
->Tabbar标签栏
复制使用Tabbar标签栏
查看效果
4.更改"我的
"图标,Vant官网中选择基础组件
->icon图标
更改icon
的属性
查看更改后的效果
5.设置路由模式
给外层(van-tabbar
)添加route
属性,内层(van-tabbar-item
)添加to
属性
在router
->index.js
中,填写对应的路由规则
4.User组件
<template>
<div class="user-container">
<!-- 用户基本信息面板 -->
<div class="user-card">
<!-- 用户头像、姓名 -->
<van-cell>
<!-- 使用 title 插槽来自定义标题 -->
<template #icon>
<img src="../../assets/logo.png" alt="" class="avatar" />
</template>
<template #title>
<span class="username">用户名</span>
</template>
<template #label>
<van-tag color="#fff" text-color="#007bff">申请认证</van-tag>
</template>
</van-cell>
<!-- 动态、关注、粉丝 -->
<div class="user-data">
<div class="user-data-item">
<span>0</span>
<span>动态</span>
</div>
<div class="user-data-item">
<span>0</span>
<span>关注</span>
</div>
<div class="user-data-item">
<span>0</span>
<span>粉丝</span>
</div>
</div>
</div>
<!-- 操作面板 -->
<van-cell-group class="action-card">
<van-cell icon="edit" title="编辑资料" is-link />
<!-- <van-cell icon="chat-o" title="小思同学" is-link /> -->
<van-cell icon="passed" title="服务" is-link />
<van-cell icon="photo-o" title="朋友圈" is-link />
<van-cell icon="coupon-o" title="卡包" is-link />
<van-cell icon="smile-o" title="表情" is-link />
<van-cell icon="setting-o" title="设置" is-link />
<van-cell icon="warning-o" title="退出登录" is-link />
</van-cell-group>
</div>
</template>
<script>
export default {
name: 'User',
data() {
return {
page: 1,
limit: 5
}
}
}
</script>
<style lang="less" scoped>
.user-container {
.user-card {
background-color: #66CCCC;
color: white;
padding-top: 20px;
.van-cell {
background: #66CCCC;
color: white;
&::after {
display: none;
}
.avatar {
width: 60px;
height: 60px;
background-color: #fff;
border-radius: 50%;
margin-right: 10px;
}
.username {
font-size: 14px;
font-weight: bold;
}
}
}
.user-data {
display: flex;
justify-content: space-evenly;
align-items: center;
font-size: 14px;
padding: 30px 0;
.user-data-item {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
width: 33.33%;
}
}
}
</style>
5.Home组件
1.使用Vant组件库的导航栏
(1)复制到Home
组件中
- 这里我们的项目只需要用到
title
属性
(2)设置Header
头部区域的样式
查看效果
2.发起axios
请求获取后端数据
(1)安装axios
(2)封装request.js
模块,配置好axios请求(src
->utils
->request.js
)
(3)封装API
接口(src
->api
->articleApi.js
),向外按需导出API函数
(4)Home组件中methods
封装获取文章列表的方法,created
调用该方法
3.创建使用ArticleInfo
组件
(1)初始化ArticleInfo组件
<template>
<div>
<van-cell>
<!-- 标题区域的插槽 -->
<template #title>
<div class="title-box">
<!-- 标题 -->
<span>文章的标题噢</span>
<!-- 单张图片 -->
<img src="https://www.escook.cn/vuebase/pics/1.png" alt="" class="thumb">
</div>
<!-- 三张图片 -->
<div class="thumb-box">
<img src="https://www.escook.cn/vuebase/pics/2.png" alt="" class="thumb">
<img src="https://www.escook.cn/vuebase/pics/2.png" alt="" class="thumb">
<img src="https://www.escook.cn/vuebase/pics/2.png" alt="" class="thumb">
</div>
</template>
<!-- label 区域的插槽 -->
<template #label>
<div class="label-box">
<span>作者 0评论 发布日期</span>
<!-- 关闭按钮 -->
<van-icon name="cross" />
</div>
</template>
</van-cell>
</div>
</template>
<script>
export default {
name: 'ArticleInfo'
}
</script>
<style lang="less" scoped>
.label-box {
display: flex;
justify-content: space-between;
align-items: center;
}
.thumb {
// 矩形黄金比例:0.618
width: 113px;
height: 70px;
background-color: #f8f8f8;
object-fit: cover;
}
.title-box {
display: flex;
justify-content: space-between;
align-items: flex-start;
}
.thumb-box {
display: flex;
justify-content: space-between;
}
</style>
(2)Home组件中导入注册
并使用
ArticleInfo组件
(3)列表渲染ArticleInfo组件
(4)ArticleInfo组件中封装props
属性
(5)Home组件中绑定
属性传值
(6)ArticleInfo组件中渲染数据
4.上拉加载更多
使用Vant组件库的List列表
(1)复制使用vant-list
组件
- 哪个组件需要使用List,就将它放到List组件内(ArticleInfo需要)
(2)实现上拉加载更多
5.下拉刷新
List
组件可以与 PullRefresh
组件结合使用,实现下拉刷新
的效果。
使用Vant组件库的pullRefresh
组件
(1)复制使用vant-pull-refresh组件
vant-pull-refresh
组件包裹van-list
组件
(2)实现下拉刷新
绑定disabled属性,让他的值等于finished的值
disabled
:是否禁用滚动加载
6.vant主题定制
在vant里边定制主题核心原理就是less变量
的覆盖
。
(1)把main.js
中import 'vant/lib/index.css'
改为 import 'vant/lib/index.less'
(2)项目根目录中创建vue.config.js
,然后进行配置
(3).src目录下,创建theme.less
文件
7.保存滚动条位置
(1)App.vue中缓存
Home
组件
(2)路由规则中添加meta
(3)路由对象中配置scrollBehavior()
(4)Home中的methods添加recordTopHandler()
先安装lodash
然后实现recordTopHandler()
- 滚动条滚动利用lodash的
防抖函数
优化性能
(5)页面激活时,监听页面滚动事件
(6)页面缓存时,移除事件监听
项目总结:
- 该项目使用到了
vue-cli
快速创建vue项目,结合使用vant
组件库实现UI界面结构 - 实现了
上拉加载
更多数据的功能(每当滑到底部时自动触发onLoad
,请求得到下一页数据) - 实现了
下拉刷新
功能(每当在顶部下拉时自动触发onRefresh
,请求得到下一页数据) - 使用到了vant组件库的
主题定制
(覆盖组件库默认样式,实现样式复用) - 实现了
保留滚动条记录
的功能(当切换路由链接时,保存滚动条位置)