Vue.js结合bootstrap实现分页控件

本文为大家分享了使用vue.js结合bootstrap 开发的分页控件,供大家参考,具体内容如下

效果如下

实现代码:

<!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" href="/lib/bootstrap/dist/css/bootstrap.css" rel="external nofollow" />
</head>
<body>
 <div class="container body-content">
 <div id="test" class="form-group">
  <div class="form-group">
  <div class="page-header">
   数据
  </div>
  <table class="table table-bordered table-responsive table-striped">
   <tr>
   <th>姓名</th>
   <th>年龄</th>
   <th>删除信息</th>
   </tr>
   <tr v-for="item in arrayData">
   <td class="text-center">{{item.name}}</td>
   <td>{{item.age}}</td>
   <td><a href="javascript:void(0)" rel="external nofollow" v-on:click="deleteItem($index,item.age)">del</a></td>
   </tr>
  </table>
  <div class="page-header">分页</div>
  <div class="pager" id="pager">
   <span class="form-inline">
   <select class="form-control" v-model="pagesize" v-on:change="showPage(pageCurrent,$event,true)" number>
    <option value="10">10</option>
    <option value="20">20</option>
    <option value="30">30</option>
    <option value="40">40</option>
   </select>
   </span>
   <template v-for="item in pageCount+1">
   <span v-if="item==1" class="btn btn-default" v-on:click="showPage(1,$event)">
    首页
   </span>
   <span v-if="item==1" class="btn btn-default" v-on:click="showPage(pageCurrent-1,$event)">
    上一页
   </span>
   <span v-if="item==1" class="btn btn-default" v-on:click="showPage(item,$event)" v-bind:class="item==pageCurrent?'active':''">
    {{item}}
   </span>
   <span v-if="item==1&&item<showPagesStart-1" class="btn btn-default disabled">
    ...
   </span>
   <span v-if="item>1&&item<=pageCount-1&&item>=showPagesStart&&item<=showPageEnd&&item<=pageCount" class="btn btn-default" v-on:click="showPage(item,$event)" <span style="font-family: Arial, Helvetica, sans-serif;"> v-bind:class="item==pageCurrent?'active':''"</span><span style="font-family: Arial, Helvetica, sans-serif;">></span>
    {{item}}
   </span>
   <span v-if="item==pageCount&&item>showPageEnd+1" class="btn btn-default disabled">
    ...
   </span>
   <span v-if="item==pageCount" class="btn btn-default" v-on:click="showPage(item,$event)" <span style="font-family: Arial, Helvetica, sans-serif;">v-bind:class="item==pageCurrent?'active':''"</span><span style="font-family: Arial, Helvetica, sans-serif;">></span>
    {{item}}
   </span>
   <span v-if="item==pageCount" class="btn btn-default" v-on:click="showPage(pageCurrent+1,$event)">
    下一页
   </span>
   <span v-if="item==pageCount" class="btn btn-default" v-on:click="showPage(pageCount,$event)">
    尾页
   </span>
   </template>
   <span class="form-inline">
   <input class="pageIndex form-control" style="width:60px;text-align:center" type="text" v-model="pageCurrent | onlyNumeric" v-on:keyup.enter="showPage(pageCurrent,$event,true)" />
   </span>
   <span>{{pageCurrent}}/{{pageCount}}</span>
  </div>
  </div>
 </div>
 <hr />
 <footer>
  <p>© 2016 - 笑问苍天丶</p>
 </footer>
 </div> 

 <script src="/lib/jquery/dist/jquery.js"></script>
 <script src="/lib/bootstrap/dist/js/bootstrap.js"></script>
 <script src="/lib/vue.js"></script>
 <script>
 //只能输入正整数过滤器
 Vue.filter('onlyNumeric', {
  // model -> view
  // 在更新 `<input>` 元素之前格式化值
  read: function (val) {
  return val;
  },
  // view -> model
  // 在写回数据之前格式化值
  write: function (val, oldVal) {
  var number = +val.replace(/[^\d]/g, '')
  return isNaN(number) ? 1 : parseFloat(number.toFixed(2))
  }
 }) 

 //数组删除某项功能
 Array.prototype.remove = function (dx) {
  if (isNaN(dx) || dx > this.length) { return false; }
  for (var i = 0, n = 0; i < this.length; i++) {
  if (this[i] != this[dx]) {
   this[n++] = this[i]
  }
  }
  this.length -= 1
 } 

 var vue = new Vue({
  el: "#test",
  data: {
  //总项目数
  totalCount: 200,
  //分页数
  pageCount: 20,
  //当前页面
  pageCurrent: 1,
  //分页大小
  pagesize: 10,
  //显示分页按钮数
  showPages: 11,
  //开始显示的分页按钮
  showPagesStart: 1,
  //结束显示的分页按钮
  showPageEnd: 100,
  //分页数据
  arrayData: []
  },
  methods: {
  //分页方法
  showPage: function (pageIndex, $event, forceRefresh) { 

   if (pageIndex > 0) { 

   if (pageIndex > this.pageCount) {
    pageIndex = this.pageCount;
   } 

   //判断数据是否需要更新
   var currentPageCount = Math.ceil(this.totalCount / this.pagesize);
   if (currentPageCount != this.pageCount) {
    pageIndex = 1;
    this.pageCount = currentPageCount;
   }
   else if (this.pageCurrent == pageIndex && currentPageCount == this.pageCount && typeof (forceRefresh) == "undefined") {
    console.log("not refresh");
    return;
   } 

   //测试数据 随机生成的
   var newPageInfo = [];
   for (var i = 0; i < this.pagesize; i++) {
    newPageInfo[newPageInfo.length] = {
    name: "test" + (i + (pageIndex - 1) * 20),
    age: (i + (pageIndex - 1) * 20)
    };
   }
   this.pageCurrent = pageIndex;
   this.arrayData = newPageInfo; 

   //计算分页按钮数据
   if (this.pageCount > this.showPages) {
    if (pageIndex <= (this.showPages - 1) / 2) {
    this.showPagesStart = 1;
    this.showPageEnd = this.showPages - 1;
    console.log("showPage1")
    }
    else if (pageIndex >= this.pageCount - (this.showPages - 3) / 2) {
    this.showPagesStart = this.pageCount - this.showPages + 2;
    this.showPageEnd = this.pageCount;
    console.log("showPage2")
    }
    else {
    console.log("showPage3")
    this.showPagesStart = pageIndex - (this.showPages - 3) / 2;
    this.showPageEnd = pageIndex + (this.showPages - 3) / 2;
    }
   }
   console.log("showPagesStart:" + this.showPagesStart + ",showPageEnd:" + this.showPageEnd + ",pageIndex:" + pageIndex);
   } 

  }
  , deleteItem: function (index, age) {
   if (confirm('确定要删除吗')) {
   //console.log(index, age); 

   var newArray = [];
   for (var i = 0; i < this.arrayData.length; i++) {
    if (i != index) {
    newArray[newArray.length] = this.arrayData[i];
    }
   }
   this.arrayData = newArray;
   }
  }
  }
 });
 vue.$watch("arrayData", function (value) {
  //console.log("==============arrayData begin==============");
  //console.log(value==vue.arrayData);
  //console.log(vue.arrayData);
  //console.log("==============arrayData end==============");
 });
 vue.showPage(vue.pageCurrent, null, true);
 </script>
</body>
</html>

源码下载: bootstrap分页控件

参考资料: Vue.js官网

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 使用Bootstrap + Vue.js实现添加删除数据示例

    界面首先需要引入bootstrap的css和bootstrap的js文件,还有vue.js和jQuery.js才可以看见效果. 这里提供bootstrap的在线文件给大家引用: <!-- 最新版本的 Bootstrap 核心 CSS 文件 --> <link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="

  • 利用纯Vue.js构建Bootstrap组件

    没有jQuery, bootstrap.js, 或不需要任何第三方插件. This repository contains a set of native Vue.js components based on Bootstrap's markup and CSS. As a result no dependency on jQuery or Bootstrap's JavaScript is required. The only required dependencies are: Vue.js

  • Vue.js bootstrap前端实现分页和排序

    写之前先抱怨几句.本来一心一意做.net开发的,渐渐地成了只做前端.最近项目基本都用java做后台,我们这些.net的就成了前端,不是用wpf做界面,就是用html写web页面. 深知自己前端技术不足,以前虽说用asp.net前后台都做,但是,对于前端都是用现成的js库和页面模板,对于vue.js等框架基本没有接触过. 只怪自己不会写java,最近做一个项目,负责前端,后台传来数据不分页,前端收到所有数据后自己分页.我尽是无语. 正好最近在看vue.js.这个页面就用它来实现吧.顺便总结下. 效

  • bootstrap vue.js实现tab效果

    本文实例为大家分享了bootstrap vue.js实现tab效果的具体代码,供大家参考,具体内容如下 项目目录结构 Student.js代码 function Student(){ this.baseInfo = { tabStatus : true , name : '张三', sex : 'male' } , this.parentsInfo = { tabStatus : false, fatherName : '张全蛋', motherName : '李铁柱' } , this.stu

  • 如何将 jQuery 从你的 Bootstrap 项目中移除(取而代之使用Vue.js)

    Bootstrap是网上最流行的前端开发框架. 除了用它,我不知道还有其他更快的方法去构建一个响应式的网站. 但是自从我向网页添加动态功能的工具变成vue.js后.适应bootstrap变得困难起来.因为这带来了一些技术包袱.没错.我说的就是jquery. 这并不是在抨击jquery,我只是意识到,当你已经在项目里使用一些像Vue的框架后,再引入jQuery就会出现一些显著的缺点: 增加开销.jQuery将会使你的网页增加30KB. 在使用诸如webpack一类的打包工具时,jquery也会很难

  • Vue.js结合bootstrap实现分页控件

    本文为大家分享了使用vue.js结合bootstrap 开发的分页控件,供大家参考,具体内容如下 效果如下 实现代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <tit

  • Vue.js结合bootstrap前端实现分页和排序效果

    写之前先抱怨几句.本来一心一意做.net开发的,渐渐地成了只做前端.最近项目基本都用java做后台,我们这些.net的就成了前端,不是用wpf做界面,就是用html写web页面. 深知自己前端技术不足,以前虽说用asp.net前后台都做,但是,对于前端都是用现成的js库和页面模板,对于vue.js等框架基本没有接触过. 只怪自己不会写java,最近做一个项目,负责前端,后台传来数据不分页,前端收到所有数据后自己分页.我尽是无语. 正好最近在看vue.js.这个页面就用它来实现吧.顺便总结下. 排

  • angularjs实现的前端分页控件示例

    前言:之前写个一个jQuery的分页显示插件,存在许多的bug,现在由于业务需要,学习的一点AngularJS,重新用angularjs实现了这个分页插件 实现效果图: (效果图是加上了bootstrap的css文件) 用法: angular-pagination.js代码: /** * angularjs分页控件 * Created by CHEN on 2016/11/1. */ angular.module('myModule', []).directive('myPagination',

  • 基于Bootstrap仿淘宝分页控件实现代码

    大家都应该上过淘宝的吧,没有上过淘宝的同学估计也没几个了,但是我相信大多数的人都是在淘宝上面买完东西就下线,很少有人会关注淘宝上的设计这类的,但是对于普通人这样还行,但是对于一个程序员这样就可不行了,因为博主本人是从事前端方面的工作,所以就通过仿照淘宝的设计样式,以求在技能上面能够有一个大的突破 一.淘宝分页控件了解 先上一张淘宝的分页图片: 根据上图中对淘宝分页控件的分析,我们大致上可以将淘宝分页控件分成两部分,一部分是核心部分,这一部分主要就是一个分页的核心功能,这个功能同时也是也是不可或缺

  • 基于KO+BootStrap+MVC实现的分页控件代码分享

    JS: /// <reference path="../knockout-3.2.0.js" /> var ViewModel = function (data) { var self = this; self.ObjectList = ko.observableArray(data.ObjectList) self.TotalCount = ko.observable(data.TotalCount); self.PerCount = ko.observable(data

  • BootStrap中Datepicker控件带中文的js文件

    bootstrap-datepicker 是一个非常优秀的时间选择插件,默认是英文显示日期的.本文给大家介绍bootstrap datepicker带中文的js文件. //用之前引用bootstrap的jsif ($(".datepicker").length > 0) { $(".datepicker").datepicker({ language: "zh-CN", autoclose: true,//选中之后自动隐藏日期选择框 cle

  • MvcPager分页控件 适用于Bootstrap

    软件开发分页效果必不可少,对于Asp.Net MVC 而言,MvcPager 是个不错的选择. 请访问http://www.webdiyer.com/mvcpager/ 由于自带的分页样式不能和项目整体风格兼容,所以我们准备改写源代码,使其能够使用Bootstrap 的分页样式. 先来查看两种分页的html代码 Bootstrap 样式: <ul class="pagination"> <li class="disabled"><a h

  • 基于JS分页控件实现简单美观仿淘宝分页按钮效果

    最新版本代码请移步到https://github.com/pgkk/kkpager 在线测试链接:http://pgkk.github.io/kkpager/example/pager_test.html 分页按钮思想: 1.少于9页,全部显示 2.大于9页,1.2页显示,中间页码当前页为中心,前后各留两个页码 附件中有完整例子的压缩包下载.已更新到最新版本 先看效果图: 01输入框焦点效果 02效果 模仿淘宝的分页按钮效果控件kkpager JS代码: Js代码 var kkpager = {

  • JS分页控件 可用于无刷新分页

    JS分页控件,可用于无刷新分页 复制代码 代码如下: function PagerBar(recordcount, pagesize, pageindex, showpagecount) {     var NumberRegex = new RegExp(/^\d+$/);     this.PageIndex = 1; //页索引,当前页     if (pageindex != null && NumberRegex.test(pageindex)) this.PageIndex =

  • ANGULARJS中使用JQUERY分页控件

    首篇,不知写何物,思来想去,敬上分页控件使用方法,望共同探讨. 分页乃前端数据展现之常用功能,而在我们使用的Angular js中,原生的分页需要将数据全部取到前端后,然后再到前端分页,在大批量数据操作时并不实用.接下来,我来介绍了将一种jquery的分页控件修改为Angularjs指令的方法. 首先在web项目中引用jquery1.10.Angularjs库文件以及jq-pagination控件. 我降指令名称为custompagination,为指令添加Html样式. 然后给指令添加对应的控

随机推荐