javascript - 使用 Vue,在多个父组件中使用一个 Pagination 组件的最佳方法是什么?
问题描述
我创建了一个 Vue 分页组件,它将被多个区域用于为不同的内容表启用分页。从该表中,我将以下内容发送到props
分页组件offset
、limit
和。total
parent_name
<pagination v-bind:offset="offset" v-bind:limit="limit" v-bind:total="total" pagination_object="parent_object_name"></pagination>
分页组件有一个下一个和上一个按钮,可以根据传入的道具适当地启用/禁用。我不确定如何更好地处理下一个和上一个事件的点击事件。我需要将这些事件发送回调用父组件。
目前我正在使用事件总线来发送点击事件并传入父对象名称以区分正在使用的父对象。
methods: {
previous() {
event_bus.$emit('pagination_previous', this.pagination_object);
},
next() {
event_bus.$emit('pagination_next', this.pagination_object);
}
}
然后在父对象中,我监听这些事件并查看父对象名称是否匹配。
created() {
event_bus.$on('pagination_previous', pagination_object => {
if (pagination_object === 'my_name') {
// Perform the action
}
}),
event_bus.$on('pagination_next', pagination_object => {
if (pagination_object === 'my_name') {
// Perform the action
}
});
}
有没有更好的方法将点击事件发送回调用父母?谢谢!
解决方案
在子组件中尝试使用this.$emit(...)
函数向父组件发送事件和其他希望的参数:
methods: {
previous() {
this.$emit('pagination_previous', this.pagination_object);
},
next() {
this.$emit('pagination_next', this.pagination_object);
}
}
pagination_previous
在父组件中,通过添加和事件来调用子组件,pagination_next
而无需parent_object_name
属性:
<pagination v-bind:offset="offset" v-bind:limit="limit" v-bind:total="total" v-on:pagination_previous="page_prev" v-on:pagination_next="page_next"></pagination>
您不需要将代码放入created
挂钩中,但您必须添加page_prev
page_next
到您的方法对象中,如下所示:
methods:{
page_prev(pagination_object){
//todo
},
page_next(pagination_object){
//todo
}
...
}
推荐阅读
- bash - 如何在 bash 中回显![](../images/a.png)?
- javascript - Dygraph 不会显示在 Bootstrap 卡中
- vba - 在访问 VBA 中,有没有办法使用组合框条件在表中查找记录并将该记录添加到不同的表中?
- python - 如何解决 Django 模板上的字符串到数据的转换问题
- go - 如何在 VS Code 中消除烦人的自动选择
- python - 用层次聚类的颜色绘制聚类
- python - 在 re.sub 中传递函数时获取匹配号
- r - 如何将 R 向量中每个元素的长度传递给 substr 函数?
- kubernetes - Kubernetes 集群工作但从 NGINX 控制器收到此错误
- object - 应用程序启动方法中的异常——带有 Intellj 的 JavaFx