抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

因为不推荐直接使用redux,小项目自己实现即可。

写了一个分页样式,不想每个vue文件都写一遍,于是打算组件。

有共性的才能抽离成为组件,对于分页操作,只关心三要素:当前页码,分页大小,总数量。

因此子组件先在props定义这三个值,我这里统一放到pageInfo对象了。

1
2
3
4
5
6
7
props: {
pageInfo:{ //这个就是父组件中子标签自定义名字
total_nums:'', //总数
currentPage:'', //当前页
pagesize:'' //分页大小
}
},

然后使用this.$emit()的方法向父组件传递变量,我这边把三个变量作为一个整体来传了。

子组件内容如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<template>
<div class="block" style="padding-top: 20px">
<el-pagination
id="haishiwode"
background
:total="pageInfo.total_size"
:current-page.sync="pageInfo.currentPage"
:page-sizes="[5, 10, 50, 100]"
:page-size="pageInfo.pagesize"
layout="total, sizes, prev, pager, next, jumper"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
>
</el-pagination>
</div>
</template>

<script>
export default {
name: "tablepagination",
props: {

pageInfo:{ //这个就是父组件中子标签自定义名字
total_nums:'',
currentPage:'',
pagesize:''

}
},

methods: {
handleSizeChange: function (size) {
this.pageInfo.pagesize = size;
this.$emit("aaa",this.pageInfo);//自定义事件 传递值“子向父组件传值”
},
handleCurrentChange: function (currentPage) {
this.pageInfo.currentPage = currentPage;
this.$emit("bbb",this.pageInfo);//自定义事件 传递值“子向父组件传值”
},
}
}
</script>

上面自定义事件名字任意,不要跟已有的变量名和方法名重名了!不然会报 handler.apply is not a function

父组件

1
2
3
4
5
6
7
8
9
使用import ... from ... 引入, 如 import tablepagination from "TablePagination"
使用components返回
components: {
"tablepagination": tablepagination
},

template中使用,以及数据绑定
<tablepagination v-bind:pageInfo="pageInfo" v-on:pageInfo="updatePageInfo" />
// updatePageInfo($event)接受传递过来的文字

上面v-on:pageInfo=”updatePageInfo”把子组件信息传给父组件

v-bind:pageInfo=”pageInfo”把父组件信息传给子组件

评论