Cet article présente principalement la méthode d'utilisation de $emit pour la transmission des données de surveillance des événements dans vuejs2.0 afin d'implémenter les composants de pagination. Il est très bon et a une valeur de référence. Les amis qui en ont besoin peuvent se référer à l'article précédent
<.> L'article présente la pagination simple implémentée par vuejs. Si j'ai plusieurs pages qui nécessitent des effets de pagination, il est impossible de copier ce code pour chaque page. Cela signifie l'encapsuler et le transformer en un composant universel. Utilisez d'abord le constructeur de base de Vue pour créer une "sous-classe", Vue.extend( options )var barHtml = '<p 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>'+ '</p>'; 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;
<p id="page"> <vue-nav :cur.sync="cur" :all.sync="all" v-on:btn-click="listenDate"></vue-nav> <p style="margin-left:40px;">{{msg}}</p> </p>
.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; }
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+ '页'; } } })