vue前端显示页码,java后端分页

初始版本

实现了显示所有页码,点击相应页码拿到相应页码的数据
实质上是后端分页,前端只是显示页码、联调
不足:页码太多,也会逐个显示,不能跳转页码,没有选择中当前页码
在这里插入图片描述

<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<meta name="viewport" content="width=device-width, initial-scale=1.0" />
		<title> Vue-PagerTest</title>
		<link rel="stylesheet" type="text/css" href="/CA/bootstrap/css/bootstrap.min.css"/>
	</head>
	<body>
	<div id="vueApp">
		<div class="row">
			<table align="center">
					<tr>
						<th>标题</th>
						<th>卖点</th>
					</tr>
					<tr v-for="item in items">
						<td>{{item.title}}</td>
						<td>{{item.sellpoint}}</td>
					</tr>
			</table>
		</div>
		<div id="pagenation" class="row justify-content-center">
        <div class="col-auto" style="text-align: center;">
            <ul class="pagination ">
                <li class="page-item">
                    <a href="javascript:void(0);" @click="switchToPage(1)" class="page-link">首页</a>
                </li>
                <li v-for="i in pages">
                    <a href="#" @click="switchToPage(i)" class="page-link">{{i}}</a>
                </li>
                <li class="page-item ">
                    <a href="javascript:void(0);" @click="switchToPage(pages)" class="page-link">尾页</a>
                </li>
            </ul>
        </div>
        <!--<div class="col-auto  mb-3">
            <div class="input-group" style="width: 150px">
                <input type="text" class="form-control" :placeholder="jumpPageNumPlaceholder" v-model.number="jumpPageNum">
                <div class="input-group-append">
                    <button @click="jumpPageClick" @blur="jumpPageBlur" class="input-group-text">跳转</button>
                </div>
            </div>
        </div>-->
    </div>
	</div>
		<script src="/CA/jquery/vue.js"></script>
		<script>
			var vueApp = new Vue({
				el: "#vueApp",
				data: {
					items: [],//存储后台传过来的数据
					page: 1,//当前页
					pages: 0,//总页数
				},
				created() {
					fetch('http://localhost:8080/CA/item').then(response => response.json()).then(json => {
						this.items=json.rows;
						this.page=json.page;
						this.pages=json.pages;
					})
				},
				methods: {
					switchToPage: function(p) {
						console.log(p);
						if(p < 0 || p > this.pages) {
							return false;
						}
						fetch('http://localhost:8080/CA/item?page='+p).then(response => response.json()).then(json => {
							this.items=json.rows;
							this.page=json.page;
							this.pages=json.pages;
						})
					}
				}
			});
		</script>
	</body>
</html>

methods里互调方法,即第二个方法里调用第一个方法,要通过this.第一个方法
在这里插入图片描述

升级版本

在这里插入图片描述

<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<meta name="viewport" content="width=device-width, initial-scale=1.0" />
		<title> Vue-PagerTest</title>
		<link rel="stylesheet" type="text/css" href="/CA/bootstrap/css/bootstrap.min.css" />
	</head>
	<body>
		<div id="vueApp">
			<div class="row">
				<table align="center">
					<tr>
						<th>标题</th>
						<th>卖点</th>
					</tr>
					<tr v-for="item in items">
						<td>{{item.title}}</td>
						<td>{{item.sellpoint}}</td>
					</tr>
				</table>
			</div>
			<div style="text-align: center;">
				<ul class="pagination">
	                <li class="page-item">
	                    <a href="javascript:void(0);" @click="switchToPage(1)" class="page-link">首页</a>
	                </li>
	                <li class="page-item">
	                    <a href="javascript:void(0);" @click="switchToPage(page-1)" class="page-link">上一页</a>
	                </li>
	                <li v-for="i in pages" :class="{active:i==page}">
	                    <a href="#" @click="switchToPage(i)" class="page-link">{{i}}</a>
	                </li>
	                <li class="page-item">
	                    <a href="javascript:void(0);" @click="switchToPage(page+1)" class="page-link">下一页</a>
	                </li>
	                <li class="page-item ">
	                    <a href="javascript:void(0);" @click="switchToPage(pages)" class="page-link">尾页</a>
	                </li>
	                <span class="form-inline">
						<input type="text"class="form-control" :placeholder="jumpPageNumPlaceholder" v-model.number="num" style="width: 100px;">
		            	<span @click="jumpPageClick" @blur="jumpPageBlur" class="btn btn-default">跳转</span>
					</span>
            	</ul>    
			</div>
		</div>
		<script src="/CA/jquery/vue.js"></script>
		<script>
			var vueApp = new Vue({
				el: "#vueApp",
				data: {
					items: [], //存储后台传过来的数据
					page: 1, //当前页
					pages: 0, //总页数
					num: '',
					jumpPageNumPlaceholder: ''
				},
				created() {
					fetch('http://localhost:8080/CA/item').then(response => response.json()).then(json => {
						this.items = json.rows;
						this.page = json.page;
						this.pages = json.pages;
					})
				},
				methods: {
					switchToPage: function(p) {
						console.log(p);
						if(p < 0 || p > this.pages) {
							return false;
						}
						fetch('http://localhost:8080/CA/item?page=' + p).then(response => response.json()).then(json => {
							this.items = json.rows;
							this.page = json.page;
							this.pages = json.pages;
						})
					},
					jumpPageBlur() {
						this.jumpPageNumPlaceholder = '跳转到...'
					},
					jumpPageClick() {
						let regex = /^[0-9]+$/;
						console.log(this.num);
						if(regex.test(this.num)) {
							let num = parseInt(this.num)
							if(this.num > 0 && this.num <= this.pages) {
								this.switchToPage(this.num);
							} else {
								this.jumpPageNumPlaceholder = '超出范围'
							}
						} else {
							this.jumpPageNumPlaceholder = '输入错误'
						}
						this.num = '';
					}
				}
			});
		</script>
	</body>
</html>

采用下面写法,当前页面不会选中,原因不明,还望指教

<!--<span class="btn btn-default" @click="switchToPage(1)">
                            首页
                        </span>
				<span class="btn btn-default" @click="switchToPage(page-1)">
                            上一页
                        </span>
                <span v-for="i in pages" :class="{active:i==page}">
                	<span @click="switchToPage(i)" class="btn btn-default">{{i}}</span>
                </span>-->
				<!--<span class="btn btn-default disabled">
                            ...
                        </span>
				<span class="btn btn-default" @click="switchToPage(pages)">
                            {{pages}}
                        </span>-->
				<!--<span class="btn btn-default" @click="switchToPage(page+1)">
                            下一页
                        </span>
				<span class="btn btn-default" @click="switchToPage(pages)">
                            尾页
                        </span>-->
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值