上一篇文章介绍了vuejs实现的简单分页,如果我有几个页面都需要有分页效果,不可能每个页面都去复制一下这段代码吧,意思是封装一下,变成通用的组件。

首先使用基础 Vue 构造器,创建一个“子类”,Vue.extend( options )
var barHtml = '<div class="page-bar">'+
'<ul>'+
'<li v-if="cur>1"><a v-on:click="cur--,pageClick()">上一页</a></li>'+
'<li v-if="cur==1"><a class="banclick">上一页</a></li>'+
'<li v-for="index in indexs" v-bind:class="{ active: cur == index}">'+
'<a v-on:click="btnclick(index)">{{ index }}</a>'+
'</li>'+
'<li v-if="cur!=all"><a v-on:click="cur++,pageClick()">下一页</a></li>'+
'<li v-if="cur == all"><a class="banclick">下一页</a></li>'+
'<li><a>共<i>{{all}}</i>页</a></li>'+
'</ul>'+
'</div>';
var navBar = Vue.extend({
template:barHtml,
props:['all','cur'],
computed: {
indexs: function(){
var left = 1;
var right = this.all;
var ar = [];
if(this.all>= 5){
if(this.cur > 3 && this.cur < this.all-2){
left = this.cur - 2
right = this.cur + 2
}else{
if(this.cur<=3){
left = 1
right = 5
}else{
right = this.all
left = this.all -4
}
}
}
while (left <= right){
ar.push(left)
left ++
}
return ar
}
},
methods: {
btnclick: function(data){
if(data != this.cur){
this.cur = data;
this.$emit('btn-click',data);
}
},
pageClick: function(){
this.$emit('btn-click',this.cur);
}
},
});
window.pagenav = navBar;
这儿创建了一个全局的pagenav,可以在其它地方都可以调用。
html代码
<div id="page">
<vue-nav :cur.sync="cur" :all.sync="all" v-on:btn-click="listenDate"></vue-nav>
<p style="margin-left:40px;">{{msg}}</p>
</div>
css代码
.page-bar{
margin:40px;
}
ul,li{
margin: 0px;
padding: 0px;
}
li{
list-style: none
}
.page-bar ul{
overflow: hidden;
}
.page-bar li{
float: left;
}
.page-bar li:first-child>a {
margin-left: 0px
}
.page-bar a{
display: block;
border: 1px solid #ddd;
text-decoration: none;
position: relative;
padding: 6px 12px;
margin-left: -1px;
line-height: 1.42857143;
color: #337ab7;
cursor: pointer
}
.page-bar a:hover{
background-color: #eee;
}
.page-bar a.banclick{
cursor:not-allowed;
}
.page-bar .active a{
color: #fff;
cursor: default;
background-color: #337ab7;
border-color: #337ab7;
}
.page-bar i{
font-style:normal;
color: #d44950;
margin: 0px 4px;
font-size: 12px;
}
新建一个vue对象实例
var pageBar = new Vue({
el: '#page',
data: {
all: 8, //总页数
cur: 1,//当前页码
msg:''
},
components:{
'vue-nav':pagenav
},
watch: {
cur: function(oldValue , newValue){
console.log('监听cur前与后的值:');
console.log(arguments);
}
},
methods:{
listenDate:function(data){
this.cur = data;
this.msg = '你点击了'+data+ '页';
}
}
})
简单的用js封装了一下分页组件。
实现效果
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
<meta charset="utf-8">
<title></title>
<meta name="keywords" content="" />
<meta name="description" content="" />
<script type="text/javascript" src="js/vue.min2.js"></script>
<style>
.page-bar{
margin:40px;
}
ul,li{
margin: 0px;
padding: 0px;
}
li{
list-style: none
}
.page-bar ul{
overflow: hidden;
}
.page-bar li{
float: left;
}
.page-bar li:first-child>a {
margin-left: 0px
}
.page-bar a{
display: block;
border: 1px solid #ddd;
text-decoration: none;
position: relative;
padding: 6px 12px;
margin-left: -1px;
line-height: 1.42857143;
color: #337ab7;
cursor: pointer
}
.page-bar a:hover{
background-color: #eee;
}
.page-bar a.banclick{
cursor:not-allowed;
}
.page-bar .active a{
color: #fff;
cursor: default;
background-color: #337ab7;
border-color: #337ab7;
}
.page-bar i{
font-style:normal;
color: #d44950;
margin: 0px 4px;
font-size: 12px;
}
</style>
</head>
<body>
<div id="page">
<vue-nav :cur.sync="cur" :all.sync="all" v-on:btn-click="listenDate"></vue-nav>
<p style="margin-left:40px;">{{msg}}</p>
</div>
<script type="text/javascript">
var barHtml = '<div class="page-bar">'+
'<ul>'+
'<li v-if="cur>1"><a v-on:click="cur--,pageClick()">上一页</a></li>'+
'<li v-if="cur==1"><a class="banclick">上一页</a></li>'+
'<li v-for="index in indexs" v-bind:class="{ active: cur == index}">'+
'<a v-on:click="btnclick(index)">{{ index }}</a>'+
'</li>'+
'<li v-if="cur!=all"><a v-on:click="cur++,pageClick()">下一页</a></li>'+
'<li v-if="cur == all"><a class="banclick">下一页</a></li>'+
'<li><a>共<i>{{all}}</i>页</a></li>'+
'</ul>'+
'</div>';
var navBar = Vue.extend({
template:barHtml,
props:['all','cur'],
computed: {
indexs: function(){
var left = 1;
var right = this.all;
var ar = [];
if(this.all>= 5){
if(this.cur > 3 && this.cur < this.all-2){
left = this.cur - 2
right = this.cur + 2
}else{
if(this.cur<=3){
left = 1
right = 5
}else{
right = this.all
left = this.all -4
}
}
}
while (left <= right){
ar.push(left)
left ++
}
return ar
}
},
methods: {
btnclick: function(data){
if(data != this.cur){
this.cur = data;
this.$emit('btn-click',data);
}
},
pageClick: function(){
this.$emit('btn-click',this.cur);
}
},
});
window.pagenav = navBar;
var pageBar = new Vue({
el: '#page',
data: {
all: 8, //总页数
cur: 1,//当前页码
msg:''
},
components:{
'vue-nav':pagenav
},
watch: {
cur: function(oldValue , newValue){
console.log('监听cur前与后的值:');
console.log(arguments);
}
},
methods:{
listenDate:function(data){
this.cur = data;
this.msg = '你点击了'+data+ '页';
}
}
})
</script>
</body>
</html>
以上所述是小编给大家介绍的vuejs2.0实现分页组件使用$emit进行事件监听数据传递,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
# vue2.0
# 分页组件
# javascript如何删除所有事件监听器
# JavaScript鼠标拖动事件监听使用方法以及实例效果演示
# 关于js中removeEventListener取消事件监听的坑
# vue.js绑定事件监听器示例【基于v-on事件绑定】
# vue.js过滤器+ajax实现事件监听及后台php数据交互实例
# javascript 组合按键事件监听实现代码
# 一文详解JavaScript的事件监听(最新整理)
# 下一页
# 上一页
# 分页
# 小编
# 几个
# 不可能
# 子类
# 在此
# 我有
# 这段
# 上一
# 给大家
# 装了
# 所述
# 创建一个
# 都去
# 给我留言
# 感谢大家
# 新建一个
# 疑问请
相关文章:
西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?
已有域名如何快速搭建专属网站?
如何构建满足综合性能需求的优质建站方案?
公众号网站制作网页,微信公众号怎么制作?
网站专业制作公司有哪些,做一个公司网站要多少钱?
枣阳网站制作,阳新火车站打的到仙岛湖多少钱?
网站制作大概要多少钱一个,做一个平台网站大概多少钱?
如何快速上传自定义模板至建站之星?
为什么Go需要go mod文件_Go go mod文件作用说明
如何在云主机快速搭建网站站点?
哈尔滨网站建设策划,哈尔滨电工证查询网站?
专业公司网站制作公司,用什么语言做企业网站比较好?
网站制作服务平台,有什么网站可以发布本地服务信息?
最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?
网站制作的软件有哪些,制作微信公众号除了秀米还有哪些比较好用的平台?
攀枝花网站建设,攀枝花营业执照网上怎么年审?
如何用AWS免费套餐快速搭建高效网站?
如何通过西部建站助手安装IIS服务器?
如何快速打造个性化非模板自助建站?
宝塔新建站点报错如何解决?
如何规划企业建站流程的关键步骤?
如何零基础开发自助建站系统?完整教程解析
如何快速使用云服务器搭建个人网站?
如何在宝塔面板中创建新站点?
专业网站建设制作报价,网页设计制作要考什么证?
建站之星代理费用多少?最新价格详情介绍
洛阳网站制作公司有哪些,洛阳的招聘网站都有哪些?
建站之星上传入口如何快速找到?
高防服务器租用首荐平台,企业级优惠套餐快速部署
建站之家VIP精选网站模板与SEO优化教程整合指南
建站之星免费版是否永久可用?
深圳 网站制作,深圳招聘网站哪个比较好一点啊?
建站为何优先选择香港服务器?
如何通过万网虚拟主机快速搭建网站?
大同网页,大同瑞慈医院官网?
家庭服务器如何搭建个人网站?
常州企业网站制作公司,全国继续教育网怎么登录?
如何快速搭建虚拟主机网站?新手必看指南
javascript中对象的定义、使用以及对象和原型链操作小结
网站按钮制作软件,如何实现网页中按钮的自动点击?
制作国外网站的软件,国外有哪些比较优质的网站推荐?
网站制作模板下载什么软件,ppt模板免费下载网站?
建站之星客服服务时间及联系方式如何?
建站之星如何快速更换网站模板?
再谈Python中的字符串与字符编码(推荐)
如何在西部数码注册域名并快速搭建网站?
建站之星如何优化SEO以实现高效排名?
微信推文制作网站有哪些,怎么做微信推文,急?
免费网站制作模板下载,除了易企秀之外还有什么H5平台可以制作H5长页面,最好是免费的?
*请认真填写需求信息,我们会在24小时内与您取得联系。