初始版本
实现了显示所有页码,点击相应页码拿到相应页码的数据
实质上是后端分页,前端只是显示页码、联调
不足:页码太多,也会逐个显示,不能跳转页码,没有选择中当前页码
<%@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>-->