laravel ajax分页实例,Laravel + Element 超简单实现分页效果案例教程

cff57a6703d2886c30d71445891769bc.png

在Web应用开发中,前端常常要展示数据列表,数据较多时就要对查询结果进行分页,只显示当前页的数据,一方面不会造成数据列表过长,另一方面减少每次查询和返回的数据量。Laravel 中实现数据分页非常简单,使用 Element-UI 完成分页数据的前端展示同样非常简单。

一、Laravel 分页

1、在其他框架中,分页操作可能比较复杂。Laravel 不管使用数据库查询构造器 或者 Eloquent ORM ,都可以非常方便、易用的完成数据库查询结果集分页操作。

数据分页至少需要两个参数:一是每页多少条数据,二是当前显示第几页。Laravel 数据分页有多种方法,最简单的是使用 paginate 方法。默认情况下,HTTP 请求中的 page 查询参数值被当作当前页的页码。 Laravel 会自动检测该值,并自动将其插入到分页器生成的链接中。

2、以查询 User 模型数据为例,先创建路由。

Route::middleware('auth:api')->prefix('v1')->group(function() { Route::apiResource('users', 'UserController');}

这样定义之后在以 get 方法请求 api/v1/users 路径时,默认情况下是控制器 UserController 的 index 方法。

3、在 UserController.php 文件中定义 index 方法:

public function index(Request $request)

{

//分页, 参数size是每页查询多少条数据,另一个参数 page 会自动检测

$pageSize = $request->query('size');

$result = User::paginate($pageSize);

return $this->success($result);

}

page 是默认参数,会自动检测,所以这里只出现了一个自定义参数 size,表示每页查询的数据条数。在 Laravel 中 get 请求参数可以用 query 方法接收。success 是自定义的一个方法,用于定义并转化要返回的 json 格式数据。

4、返回结果示例,其中 size 为 3,page 为 2。返回数据除了 data ,还有两个重要参数:一是当前页 current_page,也就是 URL 参数中的 page,另一个是 total,表示 User 表中所有数据的总数。有了 total 、size、current_page 三个参数,就可以推断出其它参数,所以返回数据中给出的上一页、下一页、最后一页的值及 URL 在后续的程序中并不会使用。

请求地址: http://zhangschool.test/api/v1/users?size=3&page=2

90679998fdfca4b03ad4dfd9dffdce2f.png

二、vue-element-admin 前端框架

1、Element-UI 是基于 Vue 2.0 的桌面端组件库,内置有 Pagination 分页组件。vue-element-admin 是一个后台前端解决方案,它基于 vue 和 element-ui 实现,vue-admin-template 是其简化版。本示例使用 vue-admin-template ,完成基础框架的构建。

2、在 router/index.js 文件中先添加路径。

{

path: 'user',

name: 'User',

component: () => import('@/views/user/index'),

meta: { title: '用户管理', icon: 'table' }

},

3、在 views/user 目录下创建文件 index.vue,用 el-table 组件显示数据。示例代码:

7bd106d22e069d1c993988d05915a61c.png

4、接着,采用 el-pagination 分页组件,继续编辑 index.vue 文件,其中属性 page-size 是每页请求多少条数据,total 是指一共有多少数据。另外还有四个事件分别绑定了四个函数,分别在切换当前页、改变请求条数(即 page-size 值)、点击上一页、点击下一页时触发。

f7d765a6718cc947cbb3aff228442325.png

5、在 api 目录下,新建 user.js 文件并编辑,示例代码:

import request from '@/utils/request'

export function userIndex(pageSize, currentPage) {

return request({

url: '/users?size=' + pageSize + '&page=' + currentPage,

method: 'get'

})

}

其中 request 是 vue-admin-template 框架中向后端发起请求的文件,封装的发起请求的 http 客户端是 axios 。最终请求的 url 示例:

http://zhangschool.test/api/v1/users?size=3&page=2

6、user/index.vue 文件中 script 部分代码如下:

f77df104a3cdc1503aae45670d551ab8.png

ee32ac5a525eeafdfdba2a534a5cb0f7.png

引入request.js 中定义的方法 userIndex()

data 数据的5个属性, loading 表示数据加载中、tableData 是表格数据, total 是所有数据总条数,total 要给定个默认值,不能为空。currentPage 是当前页码,默认值就是第1页,即在 URL 中 page=1。pageSize 是每页获取多少条数据,默认值和 el-pagination 组件 page-sizes 数组第一个元素的值相同。

在 mounted 中调用 getUserIndex() 函数,即在 vue 完成页面模版渲染后即向后台请求数据。

定义 getUserIndex() 函数,向后端发起请求,请求成功之后,按前述返回结果中的 json 数据结构,给 data 中定义的属性赋值,表格中数据就正常显示了。

切换当前页等四个事件所绑定的函数都会接收一个参数 $var,这个参数就是当前事件的值。 这就好办了,用这个新的 $var 的值改变 data 中相应的属性值,再调用 getUserIndex() 函数重新向后台请求数据。

三、最终完成结果

9197bafdde831964b9e46a869613ca58.png

3abf297243fb216bde774ea902db637a.png(切换到 5条/页并且切换到第2页)

本案例采用 Laravel 6.X ,vue-admin-template 4.1.0,element-ui 2.7.2,很容易就完成了后端数据分页和前端的数据列表分页展示。

---end---

举报/反馈

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值