>  기사  >  웹 프론트엔드  >  vuejs2.0은 페이징 구성 요소_javascript 기술에서 이벤트 모니터링 데이터 전송을 위해 $emit를 사용하는 방법을 구현합니다.

vuejs2.0은 페이징 구성 요소_javascript 기술에서 이벤트 모니터링 데이터 전송을 위해 $emit를 사용하는 방법을 구현합니다.

高洛峰
高洛峰원래의
2017-02-24 17:20:301550검색

이번 글에서는 vuejs2.0에서 이벤트 모니터링 데이터 전송을 위해 $emit을 사용하여 페이징 컴포넌트를 구현하는 방법을 주로 소개하고 있는데, 필요하신 분들은 이전 글을 참고하시면 됩니다

기사에서는 vuejs로 구현한 간단한 페이징을 소개합니다. 페이징 효과가 필요한 페이지가 여러 개인 경우 모든 페이지에 이 코드를 복사하는 것은 불가능합니다.

먼저 기본 Vue 생성자를 사용하여 "하위 클래스"인 Vue.extend(옵션)를 생성합니다.

var barHtml = &#39;<p class="page-bar">&#39;+
   &#39;<ul>&#39;+
   &#39;<li v-if="cur>1"><a v-on:click="cur--,pageClick()">上一页</a></li>&#39;+
   &#39;<li v-if="cur==1"><a class="banclick">上一页</a></li>&#39;+
   &#39;<li v-for="index in indexs" v-bind:class="{ active: cur == index}">&#39;+
    &#39;<a v-on:click="btnclick(index)">{{ index }}</a>&#39;+
   &#39;</li>&#39;+
   &#39;<li v-if="cur!=all"><a v-on:click="cur++,pageClick()">下一页</a></li>&#39;+
   &#39;<li v-if="cur == all"><a class="banclick">下一页</a></li>&#39;+
   &#39;<li><a>共<i>{{all}}</i>页</a></li>&#39;+
   &#39;</ul>&#39;+
  &#39;</p>&#39;;
 var navBar = Vue.extend({
 template:barHtml,
 props:[&#39;all&#39;,&#39;cur&#39;],
 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(&#39;btn-click&#39;,data); 
  }
  },
  pageClick: function(){
  this.$emit(&#39;btn-click&#39;,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: &#39;#page&#39;,
 data: {
  all: 8, //总页数
  cur: 1,//当前页码
  msg:&#39;&#39;
 },
 components:{
  &#39;vue-nav&#39;:pagenav
 },
 watch: {
  cur: function(oldValue , newValue){
  console.log(&#39;监听cur前与后的值:&#39;);
  console.log(arguments);
  }
 }, 
 methods:{
  listenDate:function(data){
  this.cur = data;
  this.msg = &#39;你点击了&#39;+data+ &#39;页&#39;;
  }
 }
 })

는 단순히 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 중국어 웹사이트에 주목하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.