vue分页(Vue分页功能最后一页显示没有更多数据)

[img]

简介:

本文将介绍使用Vue.js实现分页的方法。Vue.js是一款流行的JavaScript框架,它提供了一套易于使用和灵活的工具来构建现代化的、复杂的Web应用程序。在本文中,我们将使用Vue.js和一些库来实现一个简单的分页功能。

多级标题:

一、创建Vue实例

二、准备数据

三、创建分页组件

1.设置组件属性和数据

2.计算分页数和当前页码

3.设置分页按钮

四、添加事件处理

1.监听分页按钮的点击事件

2.计算页码

3.更新分页组件状态

内容详细说明:

一、创建Vue实例

首先,我们要创建一个Vue实例,用来绑定我们的分页组件。

var app = new Vue({

el: '#app',

data: {

currentPage: 1,

pageSize: 10,

total: 100

}

});

在上面的代码中,我们定义了一个名为“app”的Vue实例,它绑定了id为“app”的HTML元素。同时,我们定义了三个数据属性:currentPage表示当前页码,pageSize表示每页显示的数据量,total表示总共的数据量。

二、准备数据

分页需要数据来支持,所以我们需要准备一些数据去测试我们的分页组件。本文中,我们使用一个数组来作为我们的数据源。

var dataList = [

{id: 1, name: "张三", age: 20},

{id: 2, name: "李四", age: 21},

{id: 3, name: "王五", age: 22},

{id: 4, name: "赵六", age: 23},

{id: 5, name: "钱七", age: 24},

{id: 6, name: "孙八", age: 25},

{id: 7, name: "周九", age: 26},

{id: 8, name: "吴十", age: 27},

{id: 9, name: "郑十一", age: 28},

{id: 10, name: "王十二", age: 29},

{id: 11, name: "李十三", age: 30},

{id: 12, name: "张十四", age: 31},

{id: 13, name: "王十五", age: 32},

{id: 14, name: "赵十六", age: 33},

{id: 15, name: "孙十七", age: 34},

{id: 16, name: "钱十八", age: 35},

{id: 17, name: "周十九", age: 36},

{id: 18, name: "吴二十", age: 37},

{id: 19, name: "郑二十一", age: 38},

{id: 20, name: "李二十二", age: 39},

{id: 21, name: "张二十三", age: 40},

];

三、创建分页组件

我们将分页的组件封装在一个Vue组件内。在组件中,我们会设置一些属性和数据,计算页码并更新分页按钮。

1.设置组件属性和数据

Vue.component('pagination', {

props: {

currentPage: {

type: Number,

default: 1

},

pageSize: {

type: Number,

default: 10

},

total: {

type: Number,

default: 10

}

},

data: function() {

return {

pageCount: 0 // 总页数

}

}

});

在上面的代码中,我们定义了一个名为“pagination”的Vue组件,它接收三个属性:currentPage表示当前页码,pageSize表示每页的数据量,total表示总共有多少数据。同时,我们定义了一个数据属性pageCount用来存储总页数。

2.计算分页数和当前页码

computed: {

pageNums: function () {

var pageCount = this.pageCount;

var currentPage = this.currentPage;

var result = [];

if (pageCount <= 9) {

for (var i = 1; i <= pageCount; i++) {

result.push(i);

}

} else {

result.push(1);

if (currentPage > 4 && currentPage <= pageCount - 5) {

result.push('...');

for (var i = currentPage - 4; i <= currentPage + 4; i++) {

result.push(i);

}

result.push('...');

} else if (currentPage > pageCount - 5) {

result.push('...');

for (var i = pageCount - 8; i <= pageCount; i++) {

result.push(i);

}

} else {

for (var i = 2; i <= 9; i++) {

result.push(i);

}

result.push('...');

}

result.push(pageCount);

}

return result;

}

},

在上面的代码中,我们定义了一个计算属性pageNums,它计算出当前的页码按钮数组。我们首先需要计算出总页数,然后根据当前页码和总页数来计算页码按钮数组。

3.设置分页按钮

methods: {

setPage: function (pageNumber) {

if (pageNumber <= 0) {

pageNumber = 1;

} else if (pageNumber >= this.pageCount) {

pageNumber = this.pageCount;

}

this.currentPage = pageNumber;

this.$emit('page-changed', pageNumber);

},

},

template: '\

\

\

\

',

在上面的代码中,我们定义了一个名为“pagination”的Vue组件的模板。在这个模板中,我们展示了一个分页按钮组件。其中,我们使用了v-for指令来循环渲染页码按钮。

四、添加事件处理

为了实现我们的分页功能,我们需要监听分页按钮的点击事件,并根据用户的点击计算出页码并更新分页组件的状态。

1.监听分页按钮的点击事件

我们可以使用v-on指令来监听分页按钮的点击事件。在这里,我们定义了一个setPage方法来处理点击事件。

  • \

    {{num}}\

    ...\

  • \

    在上面的代码中,我们使用@click指令监听点击事件,并传递了num参数。当点击事件发生时,setPage方法会被调用并将当前页码设置为num。

    2.计算页码

    我们定义了一个setPage方法来处理分页按钮的点击事件。在这个方法中,我们计算出新的页码并更新组件状态。

    methods: {

    setPage: function (pageNumber) {

    if (pageNumber <= 0) {

    pageNumber = 1;

    } else if (pageNumber >= this.pageCount) {

    pageNumber = this.pageCount;

    }

    this.currentPage = pageNumber;

    this.$emit('page-changed', pageNumber);

    },

    },

    在setPage方法中,我们首先检查新计算出的页码是否超出限制范围,如果超出则修正为最大或最小值。然后,我们更新组件的状态,以便重新计算出页码顺序。

    3.更新分页组件状态

    为了更新分页组件的状态,我们需要使用Vue.js提供的$emit方法向父组件发出事件。

    this.$emit('page-changed', pageNumber);

    在上面的代码中,我们向父组件发出了一个名为“page-changed”的事件,并传递了当前页码。我们的父组件可以监听该事件并更新分页组件。

    在最后,我们在父组件中使用“pagination”组件显示分页按钮。

    \

    :current-page="currentPage" \

    :page-size="pageSize" \

    :total="total" \

    @page-changed="pageChanged">\

    \

    如上,我们将“pagination”组件绑定到id为“app”的HTML元素上。我们并将当前的页码、每页数据量和总共的数据量分别传递给组件。同时,我们监听了一个名为“page-changed”的事件,该事件会在用户点击按钮时被触发。我们在pageChanged方法中更新数据源并重新渲染我们的Vue实例。

    标签列表