跳转到主内容
websoft网络软件专家 - 深耕网络技术,打造实用软件!

vue项目——文章列表模块

项目地址: https://gitee.com/liangPromise/vue-app-toutiaoAdmin/tree/article/ 创建组件并配置路由 我们首先在views文件夹下面创article文件夹 里面存放的是文章列表组件

并在组件中配置了路由信息

{

path: '/home', component: () => import('@/views/home/Home.vue'), children: [ { path: '', component: () => import('@/views/home/indexHoem.vue') }, { // 文章列表 name: 'article', path: 'article', component: () => import('@/views/article') }, { // 发布文章 name: 'publish', path: 'publish', component: () => import('@/views/publish') } ] } 页面布局 在文章列表组件中我们使用了大量的element-ui组件 包括 :卡片、面包屑导航、from表单、表格、分页、等等··· 使用了大量的组件来实现页面的基本结构 并给相关的组件绑定数据和事件 内容管理页面总共分为两大部分 使用两个卡片组件所包裹 上面展示表单功能 下面使用表格来渲染数据,在表单中

文章接口 在api文件夹下新建了一个article.js文件,里面用来编写跟文章有关的api接口,随后向外暴露出去。

在文章相关的组件中,引入api方法调用,将获取的到的数据渲染到页面中

// 文章相关的接口调用

import request from '@/utils/request.js'

// 获取文章频道 const getChannels = () => { return request.get('/mp/v1_0/channels') }

// 获取文章列表 const getArticles = params => { return request.get('/mp/v1_0/articles', { params }) }

// 删除文章 const removeArticle = params => { return request.delete(`/mp/v1_0/articles/${params}`) }

// 发布文章 const addArticle = (data, params) => { console.log(data, params) return request({ method: 'POST', url: '/mp/v1_0/articles', params: { draft: params // 是否存为草稿(true 为草稿) }, data }) }

// 查询文章 const inquireArticle = params => { return request.get(`/mp/v1_0/articles/${params}`) }

// 修改文章 const editArticle = (data, params) => { return request.put(`/mp/v1_0/articles/${params}`, data) }

// 导出 export { getChannels, getArticles, removeArticle, addArticle, inquireArticle, editArticle }

数据分页 分页的目的是为了缓解查询数据的压力,提高页面的响应速度,让用户更快的看到页面的内容。

假如是固定的数据,例如10条,20条,以后不会增加了。

那就没有必要分页,没有意义。

如果是动态产生的数据,例如文章列表,商品列表,评论列表。

数据量增加的越来越多,就需要使用分页来缓解数据查询和渲染的压力的。

数据库中有 100 条数据: - 第几页 - 每页大小 后端会从数据库中获取数据, 假设每页10条数据 请求第1页数据, 1-10 - 请求第2页数据, 1-20 - 请求第3页数据, 21-30 - ... 然后后端通过接口提供给前端使用。

- page 页码, 默认第1页 - per_page 每页大小,默认每页 10 条数据 数据筛选: - 接口的参数 - 通过表单的交互得到接口参数 使用步骤 1、传递分页参数 2、注册分页组件的

current-change

事件 3、当页码改变,请求对应页码数据

:disabled="loading" background @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="currentPage4" :page-sizes="[10, 20, 30, 40]" :page-size="100" layout="total, sizes, prev, pager, next, jumper" :total="totalAll" >

---------------------------------------------------------------

// 分页功能 handleSizeChange (value) { this.form.per_page = value this.getArticlesFn(this.form) }, handleCurrentChange (value) { this.form.page = value this.getArticlesFn(this.form) }, 总页码处理 1、将数据列表接口中返回的总数据条数存储到 data 数据中 2、将总记录数和每页大小绑定到分页组件 数据筛选 把视图处理成接口需要的数据提交给后端。

1、在 data 中初始化 form并传递给请求方法 2、处理表单绑定获取 form数据 3、点击查询的时候,调用 onSubmit方法加载数据

// 查询按钮

onSubmit () { console.log(this.form) this.getArticlesFn(this.form) },

------------------------------------------------------------------

// 获取文章列表 async getArticlesFn (params) { this.loading = true const articles = await getArticles(params).catch(err => err) if (articles.status !== 200) { this.loading = false return this.$message.error('文章列表取失败') } this.articles = articles.data.data.results this.totalAll = articles.data.data.total_count console.log(articles.data.data) this.loading = false }, 加载中 loading 在表格中我们设置了加载中loading...状态,在请求期间表格处于loading状态,使项目有更好的交互状态。

1、初始化 loading 数据

// 是否加载中

loading: true 2、设置表格的 loading 状态

---------------------------------------------------------------------------- // 请求期间会开启表格的loading 状态 // 获取文章列表 async getArticlesFn (params) { this.loading = true const articles = await getArticles(params).catch(err => err) if (articles.status !== 200) { this.loading = false return this.$message.error('文章列表取失败') } this.articles = articles.data.data.results this.totalAll = articles.data.data.total_count console.log(articles.data.data) this.loading = false }, 删除文章 在这里我们遇到了一个问题,在后端返回的数中包含大数字,在js中无法正确读取 ,我们这里使用了第三方插件json-bigint解决了这个问题 。

具体怎么解决的请看我的另一篇文章,里面有详细的解决过程 解决js中后端返回数据中的大数字问题 删除操作 1、封装了删除文章请求方法 2、注册删除按钮点击事件 3、删除成功,更新当前页数据

----------------------------------------------------------

// 删除文章 removeArticleFn (id) { this.$confirm('此操作将永久删除该文章, 是否继续?', '提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }) .then(async () => { const data = await removeArticle(id).catch(err => err) console.log(data) if (data.status !== 204) return this.$message.error('文章删除失败') this.$message.success('文章删除成功') this.getArticlesFn(this.form) // 删除成功更新当前页面 }) .catch(() => { this.$message.error('已取消删除') }) },

相关文章