首先就是新建一个组件,名字就叫做PageTable
,template
里面很简单,放上表格和分页。既然表格默认带有分页,分页的数据就放在组件内部
创新互联是专业的滑县网站建设公司,滑县接单;提供网站设计制作、成都网站建设,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行滑县网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!
layout="total, sizes, prev, pager, next, jumper"
:current-page.sync="page.current"
:page-size.sync="page.size"
:total="page.total"
/>
之后开始思考一个问题,就是表格的数据是从父组件传进来,还是放在组件自身。如果放在父组件里面,那么分页的变化每次都要emit
事件通知父组件,这样我们把分页和表格合在一起就失去了意义,所以表格的数据是要放在组件自身的。
表格数据放在自身,父组件就需要传进来一个获取数据的方法,就叫做fetchData
吧,在组件内部调用这个方法,就可以获取数据了。这个方法是需要知道当前分页的,并且返回数据和总条数,由此就可以定义fetchData
了
interface ResponseStructure {
data: any[];
total: any;
}
interface fetchData {
(current: number, size: number): Promise
}
现在我们的组件已经变成了这个样子
layout="total, sizes, prev, pager, next, jumper"
:current-page.sync="page.current"
:page-size.sync="page.size"
:total="page.total"
@size-change="search"
@current-change="getTableData"
/>
表格一般都会带有搜索项,搜索参数等在父组件定义,并且逻辑写在fetchData
里即可,组件内部只处理通用的逻辑。父组件里点击了搜索按钮,是要触发获取事件的,父组件可以通过$refs
调用组件内部方法。目前我们定义了两个方法search
与getTableData
,点击搜索调用search
就可以了,并且会自动重置分页,如果有不想重置分页的情况,可以调用getTableData
。
目前为止,数据我们已经有了,但是并没有展示,因为element-ui的列信息(Table-column)是通过插槽的,我们使用slot
接收一下就可以了
到了这里基本逻辑已经完成了,再进一步,一般我们的表格需要loading,loading应该由父组件自己决定如何使用,但是状态的改变由本组件处理,这里可以使用.sync
修饰符,loading逻辑加在 getTableData
中即可
loading也加完了,功能就已经完成了,但是还存在一些问题,el-table有很多的Attributes、Events和Methods,Attributes和Events我们透传给el-table即可,Methods需要el-table的ref,如果父组件直接使用ref,获取的是组件外层的div,无法获取到el-table的ref,我们暴露一个方法抛出el-table的ref即可
至此,PageTable
就写完了,完整代码如下
v-bind="$attrs"
v-on="$listeners"
ref="tableRef"
:data="tableData"
@sort-change="sortChange"
>
layout="total, sizes,prev, pager, next, jumper"
:current-page.sync="page.current"
:page-sizes="pageSizes"
:page-size.sync="page.size"
:total="page.total"
@size-change="search"
@current-change="getTableData"
/>
当前名称:自带分页与loading的表格封装
分享路径:http://www.mswzjz.cn/qtweb/news19/12369.html
攀枝花网站建设、攀枝花网站运维推广公司-贝锐智能,是专注品牌与效果的网络营销公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 贝锐智能