Vue分页导航_vue分页组件

Vue分页导航_vue分页组件Vue分页导航原文链接:https://www.cnblogs.com/vivaxiaonan/p/9987985.html这里我用的是脚手架,粘Viva_nan大佬的代码封装了一个.vue组件。实现效果如下:封装组件newCom.vue代码:<template><divclass=”wrapper”><navclass=”zpagenav”><ulclass=”page-ul”>…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

Vue分页导航原文链接:https://www.cnblogs.com/vivaxiaonan/p/9987985.html

这里我用的是脚手架,粘 Viva_nan  大佬的代码封装了一个.vue组件。

实现效果如下:

Vue分页导航_vue分页组件

封装组件 newCom.vue 代码:

<template>
  <div class="wrapper">
    <nav class="zpagenav">
      <ul class="page-ul">
        <li :key="index" v-for="(item,index) in pageList" :class ="item.class" @click.stop="setPage(item)" v-html="item.html">
        </li>
      </ul>
		<span class="total">共 {
  
  {total}} 条</span>
		</nav>
  </div>
</template>

<script>
export default {
  name: '',
  components: {},
  props: {
		prevHtml: String,
		nextHtml: String,
		page: Number,
		total: Number,
		pageSize: Number,
		maxPage: Number
	},
  data() {
    return {
    }
  },
  watch: {},
  computed: {
    pageList() {
			var _this = this,
				pageList = [];
			let pageCount = Math.ceil(_this.total / _this.pageSize);
			let page = _this.page;
			let prevHtml = _this.prevHtml ? _this.prevHtml : '&lt;';
			let nextHtml = _this.nextHtml ? _this.nextHtml : '&gt;';
			let maxPage = _this.maxPage ? _this.maxPage : 9;

			let hasPrev = page > 1;
			let hasNext = page < pageCount;

			//上一页
			pageList.push({
				class: hasPrev ? '' : 'disabled',
				page: hasPrev ? page - 1 : page,
				html: prevHtml
			});

			//首页
			pageList.push({
				class: page == 1 ? 'active' : '',
				page: 1,
				html: 1
			});

			var p0 = Math.floor(maxPage / 2);
			var p1 = 1 + 2 + p0; //首页+省略至少2个页码+中间页面数的一半

			var start, end;
			if(page >= p1) {
				start = page - p0;
				//前置省略号
				pageList.push({
					class: 'dot',
					page: page,
					html: '...'
				});
			} else {
				start = 2;
			}

			var p2 = page + p0;
			if(p2 < pageCount) {
				end = p2;
			} else {
				end = pageCount - 1;
			}

			//页码列表
			for(let i = start; i <= end; i++) {
				pageList.push({
					class: page == i ? 'active' : '',
					page: i,
					html: i
				});
			}

			if(end < pageCount - 1) {
				//后置省略号
				pageList.push({
					class: 'dot',
					page: page,
					html: '...'
				});
			}

			//尾页
			if(pageCount > 1) {
				pageList.push({
					class: page == pageCount ? 'active' : '',
					page: pageCount,
					html: pageCount
				});
			}

			//下一页
			pageList.push({
				class: hasNext ? '' : 'disabled',
				page: hasNext ? page + 1 : page,
				html: nextHtml
			});

			return pageList;
		}
  },
  methods: {
    setPage(item) {
			if(item.class == '') {
				this.$emit('pagehandler', item.page);
      }
		}
  },
  created() {},
  mounted() {}
}


</script>
<style scoped>
.wrapper{padding: 0; margin: 0;}

.zpagenav {
	text-align: center;
	-webkit-user-select: none;
}

.zpagenav {
	font-family: arial;
	color: #48576a;
}

.zpagenav ul {
	display: inline-block;
	margin: 20px 20px;
	padding: 0;
}

.zpagenav ul li {
	display: inline-block;
	margin: 0;
	padding: 0 4px;
	border: 1px solid #d1dbe5;
	border-right: 0;
	background: #fff;
	font-size: 13px;
	min-width: 28px;
	height: 28px;
	line-height: 28px;
	cursor: pointer;
	box-sizing: border-box;
	text-align: center;
}

.zpagenav ul li:last-child {
	border-right: 1px solid #d1dbe5;
}

.zpagenav ul li:hover {
	color: #20a0ff;
}

.zpagenav ul li.active {
	border-color: #20a0ff;
	background-color: #20a0ff;
	color: #fff;
	cursor: default;
}

.zpagenav ul li.active:hover {
	color: #fff;
}

.zpagenav ul li.disabled {
	cursor: not-allowed;
	color: #e4e4e4;
}

.zpagenav ul li.dot {
	cursor: default;
}
</style>

使用封装组件 new.vue 代码:

<template>
  <div class="wrapper">
    <new-com :page="page" :page-size="pageSize" :total="total" 
      :max-page="maxPage"  @pagehandler="pageHandler">
    </new-com>
  </div>
</template>

<script>
import newCom from '@/views/new/newCom.vue'
export default {
  name: '',
  components: {
    newCom
  },
  props: {},
  data() {
    return {
      page: 1,  //显示的是哪一页
      pageSize: 10, //每一页显示的数据条数
      total: 150, //记录总数
      maxPage:3  //最大页数
    }
  },
  watch: {},
  computed: {},
  methods: {
    //pagehandler方法 跳转到page页
    pageHandler(page) {
      //here you can do custom state update
        this.page = page;
        console.log(page)
    }
  },
  created() {
    //created  表示页面加载完毕,立即执行
    this.pageHandler(1);
  },
  mounted() {}
}
</script>
<style scoped>
.wrapper{padding: 0; margin: 0;}
</style>

扫码关注微信公众号,持续更新干货

Vue分页导航_vue分页组件

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/188148.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 超级文本编辑器Sublime Text3「建议收藏」

    超级文本编辑器Sublime Text3「建议收藏」简介基础插件Package-Control中文乱码Ubuntu下输入中文输入法跟随光标在SublimeText中运行脚本解释器文件路径补全表格编辑语法高亮与着色代码匹配高亮BracketHighlighter代码布局Alignment代码对比sublimergeCompareSide-By-Side代码模板专用插件ForLua…

    2022年5月31日
    123
  • Jlink 接口定义

    Jlink 接口定义接口定义引脚定义

    2022年6月7日
    30
  • spring cloud之 hello world和eurake介绍及eurake使用

    spring cloud之 hello world和eurake介绍及eurake使用一.springcloud之helloworld1.两个微服务,分别是用户和订单,其中用户是微服务提供者,订单是微服务消费者2.首先建一个工程,里面有两个module:prvoider-user和comsumer-ordercomsumer-user配置文件:prvoider-order配置文件:用spring提供的RestTemplate访问rest…

    2022年5月10日
    53
  • 2021-11-13 2021年煤矿井下电气考试题库及煤矿井下电气考试资料

    2021-11-13 2021年煤矿井下电气考试题库及煤矿井下电气考试资料题库来源:安全生产模拟考试一点通公众号小程序安全生产模拟考试一点通:煤矿井下电气考试题库是安全生产模拟考试一点通总题库中生成的一套煤矿井下电气考试资料,安全生产模拟考试一点通上煤矿井下电气作业手机同步练习。2021年煤矿井下电气考试题库及煤矿井下电气考试资料1、【多选题】短路电流的大小与()有关。(BCDE)A、电动机的额定功率B、电缆的长度C、电缆的截面D、电网电压E、变压器的容量F、电动机的负荷2、【多选题】漏电保护方式主要有()。(ABC)A、附加直流电源式B

    2022年9月26日
    2
  • 逆波兰法表示的表达式_波兰表达式和逆波兰

    逆波兰法表示的表达式_波兰表达式和逆波兰根据 逆波兰表示法,求表达式的值。有效的算符包括 +、-、*、/ 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。说明:整数除法只保留整数部分。给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。 示例 1:输入:tokens = [“2″,”1″,”+”,”3″,”*”]输出:9解释:该算式转化为常见的中缀算术表达式为:((2 + 1) * 3) = 9示例 2:输入:tokens = [“4″,”13″,”5″,”/”,”+”]输

    2022年8月9日
    10
  • 虚拟村庄java_虚拟村庄怎么玩?[通俗易懂]

    虚拟村庄java_虚拟村庄怎么玩?[通俗易懂]那个人生病了,找另外一个人帮他治病1。生火。首先,要一个村民(成年的)到左下方拿干木柴;然后,再要他去左上方去拿干草(位置是海的最上方的一堆花的地方);等他都拿齐后,他都会放到村子中间的一圈石头围成的圈中,这时你再把他拖放到上面他就会生火了。2。水坝。这个任务需要你把村民培养成masterbuilder,而且要工程技术(Engineering)达到2级,否则不会成功。把masterbuil…

    2025年8月23日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号