获取文章列表数据
封装API方法:获取文章列表数据的时候,按照接口要求,必须传递参数才行,代码中,必须设置 params
// 获取文章列表数据export const getArticleAPI = params => {return request({method: 'GET',url: '/my/article/list',params: params})}
组件中,导入API方法,看好了,从哪个文件中导入。。。。
// 按需导入 添加文章的 API 方法
import { addArticleAPI, getArticleAPI } from '@/api/article'
设置数据项
- artList: [] 准备存放接口响应的数据(返回的文章列表数据)
- query: { } 存放请求参数(接口要求的请求参数)
设置initArticle方法,获取接口数据data() { return { artList: [], query: { pagenum: 1, // 必填 pagesize: 2, // 必填 cate_id: '', state: '' } } }
生命周期函数中,调用initArticle方法// 获取文章列表的方法 async initArticle() { const { data: res } = await getArticleAPI(this.query) if (res.code === 0) { this.artList = res.data } else { this.$message.error(res.message) } }// 声明周期函数,调用获取分类的方法 created() { this.initCategory() this.initArticle() // ................ 加入这行 }将数据渲染到表格
页面中,找到准确的位置,加入表格,并展示数据:<!-- 内容区二:表格区,展示数据 --> <el-table :data="artList" style="width: 100%" stripe border> <el-table-column prop="id" label="ID" width="80"> </el-table-column> <el-table-column prop="title" label="文章标题"> </el-table-column> <el-table-column prop="cate_name" label="所属分类"> </el-table-column> <el-table-column prop="pub_date" label="发布时间"> </el-table-column> <el-table-column prop="state" label="文章状态"> </el-table-column> <el-table-column label="操作"> </el-table-column> </el-table>处理时间
下载安装 dayjsnpm i dayjs
组件中,导入 dayjs
定义过滤器(filters、和data、methods、created是平级的)import dayjs from 'dayjs'
组件页面中,使用过滤器:// 过滤器 filters: { date_format(val) { // 过滤器函数的第1个参数,永远表示原本要输出的值(本案例中,表示格式不太好的时间) // return 'aaaa' // 真正要输出的页面的值 return dayjs(val).format('YYYY-MM-DD HH:mm:ss') } }<el-table-column label="发布时间"> <template v-slot="obj"> {{ obj.row.pub_date | date_format }} </template> </el-table-column>分页
直接到element-ui 组件库中,找到分页组件,复制完整功能:
完整的组件代码:<el-pagination @size-change="handleSizeChange" 每页多少条,数量改变,触发这个事件 @current-change="handleCurrentChange" 页码改变,会触发这个事件 :current-page="currentPage4" 当前的页码,当前展示的是第几页 :page-sizes="[100, 200, 300, 400]" 可选的每页几条数据,展示到下拉框中 :page-size="100" 每页几条数据 layout="total, sizes, prev, pager, next, jumper" 定制功能 :total="400" 数据总数 >
对应的两个方法:<!-- 内容区三:分页区 --> <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="query.pagenum" :page-sizes="[2, 3, 5, 10]" :page-size="query.pagesize" layout="total, sizes, prev, pager, next, jumper" :total="total" > </el-pagination>
补充一下:当获取到文章数据之后,把服务器返回的数据总数,赋值给数据项:methods: { // 其他方法 略........................................... // 改变了每页数据条数的时候,触发这个事件 handleSizeChange() {}, // 页码改变的时候,触发的事件 handleCurrentChange() {} }
设置好数据项:
获取到文章数据之后,把服务器返回的总数设置好:data() { return { total: 0, // 文章总数 } }// 获取文章列表的方法 async initArticle() { const { data: res } = await getArticleAPI(this.query) if (res.code === 0) { this.artList = res.data // 把数据赋值给数据项 this.total = res.total } else { this.$message.error(res.message) } },实现分页
当改变了每页几条数据后,当改变了页码后,会触发对应的方法,方法中,修改请求参数,重新发送请求获取文章列表数据。// 改变了每页数据条数的时候,触发这个事件 handleSizeChange(newSize) { // console.log(newSize) // 得到最新的,每页 显示 newSize 条数据 this.query.pagesize = newSize this.query.pagenum = 1 // 调用获取文章的方法,重新使用新的参数发送请求,获取数据,更新页面 this.initArticle() }, // 页码改变的时候,触发的事件 handleCurrentChange(newPage) { // console.log(newPage) // 表示点击的,或者跳转的最新的页码值 this.query.pagenum = newPage this.initArticle() }筛选
思路,点击下拉框的时候,修改请求参数。点击筛选按钮的时候,使用新的参数发送请求获取数据即可
- 先处理两个下拉框
补充重置的方法:<el-form :inline="true" class="demo-form-inline"> <el-form-item label="文章分类"> <el-select placeholder="请选择一个分类" v-model="query.cate_id"> <el-option v-for="item in cateList" :key="item.id" :label="item.cate_name" :value="item.id" ></el-option> </el-select> </el-form-item> <el-form-item label="文章状态"> <el-select placeholder="请选择状态" v-model="query.state"> <el-option label="已发布" value="已发布"></el-option> <el-option label="草稿" value="草稿"></el-option> </el-select> </el-form-item> <el-form-item> <el-button type="primary" @click="initArticle">查询</el-button> <el-button type="info" @click="resetList">重置</el-button> </el-form-item> </el-form>// 筛选后面的重置 resetList() { this.query = { pagenum: 1, pagesize: 2, cate_id: '', state: '' } this.initArticle() }
