이번 글에서는 vuejs2.0에서 이벤트 모니터링 데이터 전송을 위해 $emit을 사용하여 페이징 컴포넌트를 구현하는 방법을 주로 소개하고 있는데, 필요하신 분들은 이전 글을 참고하시면 됩니다
기사에서는 vuejs로 구현한 간단한 페이징을 소개합니다. 페이징 효과가 필요한 페이지가 여러 개인 경우 모든 페이지에 이 코드를 복사하는 것은 불가능합니다.
먼저 기본 Vue 생성자를 사용하여 "하위 클래스"인 Vue.extend(옵션)를 생성합니다.
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;
여기에서 전역이 생성됩니다. 페이지 탐색 다른 곳에서 호출할 수 있습니다.
html 코드
<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>
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를 사용하여 페이징 구성 요소를 캡슐화합니다.
구현 효과
<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>
위는 에디터가 소개한 vuejs2.0 구현입니다. 페이징 컴포넌트는 이벤트 모니터링 데이터 전송을 위해 $emit를 사용합니다. 질문이 있는 경우 메시지를 남겨주시면 편집자가 제 시간에 답변해 드리겠습니다. 또한 PHP 중국어 웹사이트를 지원해 주신 모든 분들께 감사드립니다!
이벤트 모니터링 및 데이터 전송을 위해 $emit를 사용하는 페이징 구성 요소의 vuejs2.0 구현에 대한 자세한 내용은 PHP 중국어 웹사이트에 주목하세요!