资讯专栏INFORMATION COLUMN

vue入门-实现一个分页组件(1.0.3版本)

wangzy2019 / 748人阅读

摘要:关注前端社区的同学,一定知道。一个小巧优雅框架。目前是正式版,然后中文文档还没更新上来。实现的一个分页组件。有了角标还需判断前一页下一页的显示增加和字段观看模版发现指令很明显当内容是就输出否就没。

vue

关注前端社区的同学,一定知道vue。一个小巧、优雅 mvvm 框架。 目前是1.0.3正式版,然后中文文档还没更新上来。 使用了一段时间的感触就是,我再也不想直接操作DOM了。数据绑定式的编程体验真是好。实现的一个分页组件。

css
ul,li{
    margin: 0px;
    padding: 0px;
}
li{
    list-style: none
}
.page-bar li:first-child>a {
   margin-left: 0px
}
.page-bar a{
    border: 1px solid #ffffd;
    text-decoration: none;
    position: relative;
    float: left;
    padding: 6px 12px;
    margin-left: -1px;
    line-height: 1.42857143;
    color: #337ab7;
    cursor: pointer
}
.page-bar a:hover{
    background-color: #eee;
}
.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;
}
模版
        


在未引入js前,页面的显示,分析下,all字段简单直接输出即可,{{index}}是分页码这个需要一些动态的渲染。

js
var pageBar = new Vue({
    el: ".page-bar",
    data: {
        all: 20, //总页数
        cur: 1,//当前页码
});

调用 new Vue({参数}) 就是创建了一个基本的组件,赋值给变量 pageBar.
el就是element的缩写,定位模版的位置.data就是数据了.
知道了总页数但是要显示页码还是要一番计算,所以显示页码就是计算属性了.
所以我们要用computed

computed: {
            indexs: function(){
              var left = 1
              var right = this.all
              var ar = [] 
              if(this.all>= 11){
                if(this.cur > 5 && this.cur < this.all-4){
                        left = this.cur - 5
                        right = this.cur + 4
                }else{
                    if(this.cur<=5){
                        left = 1
                        right = 10
                    }else{
                        right = this.all
                        left = this.all -9
                    }
                }
             }
            while (left <= right){
                ar.push(left)
                left ++
            }   
            return ar
           },
           showLast: function(){
                if(this.cur == this.all){
                    return false
                }
                return true
           },
           showFirst: function(){
                if(this.cur == 1){
                    return false
                }
               return true
           }

ok这个页码显示规则是参考Baidu搜寻的 返回值就是[2,3,4,5,6]之类。
有了角标还需判断前一页、下一页的显示.增加showLast和showFirst字段(bool)
观看html模版发现v-if指令.很明显当内容是true就输出,否就没。
重点看下

   
  • {{ index }}
  • v-for是循环渲染输出计算属性indexs.每一次循环的子元素赋值给index v-bind:class绑定class,当渲染到目前的角标的时候加个class v-on:click是绑定了事件,我把index当参数传进入了,后面做判断,默认传event事件.
    然后我们给Vue的选项里面再增加methods字段

     methods: {
                btnClick: function(data){//页码点击事件
                    if(data != this.cur){
                        this.cur = data 
                    }
                }
            }
    组件交互

    组件写完了,问题来了,用户点击发生页面改变,你怎么通知其他组件作出相应的变化. 可以在页角发生改变的函数下,插一条语句通知其他组件。不过这种方法是很差的做法。可以使用

    watch: {
        cur: function(oldValue , newValue){
                        console.log(arguments)
                }
    }

    观察了cur数据当它改变的时候,可以获取前后值。然后通知其他组件。

    完整的代码可以看 github:vue-pagination

    文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

    转载请注明本文地址:https://www.ucloud.cn/yun/86116.html

    相关文章

    • Vue.js资源分享

      摘要:中文官网英文官网组织发出一个问题之后,不要暂时的离开电脑,如果没有把握先不要提问。珍惜每一次提问,感恩每一次反馈,每个人工作还是业余之外抽出的时间有限,充分准备好应有的资源之后再发问,有利于问题能够高效质量地得到解决。 Vue.js资源分享 更多资源请Star:https://github.com/maidishike... 文章转自:https://github.com/maid...

      vpants 评论0 收藏0
    • SpringBoot-vue 基于Java的微服务全栈快速开发实践

      摘要:本项目将使用配合最简单的逻辑来展示一个基于的微服务全栈快速开发实践的。提供一系列大型项目常用的非功能性特征,比如内嵌服务器,安全,指标,健康检测,外部化配置。 SprintBoot-Vue SpringBoot + 前端MVVM 基于Java的微服务全栈快速开发实践 showImg(https://segmentfault.com/img/remote/1460000010167913...

      FleyX 评论0 收藏0
    • SpringBoot-vue 基于Java的微服务全栈快速开发实践

      摘要:本项目将使用配合最简单的逻辑来展示一个基于的微服务全栈快速开发实践的。提供一系列大型项目常用的非功能性特征,比如内嵌服务器,安全,指标,健康检测,外部化配置。 SprintBoot-Vue SpringBoot + 前端MVVM 基于Java的微服务全栈快速开发实践 showImg(https://segmentfault.com/img/remote/1460000010167913...

      neu 评论0 收藏0
    • 使用nuxt开发博客后台管理系统(一)element ui的使用

      摘要:进入主题使用我们在创建项目时已经选择安装了,安装完就能使用了。 注:文章中的nuxt为2.0.0版本 众所周知vue单页面应用的seo很不友好,每次打开页面先获取的节点也就是一个,而这对想用vue做spa又想拥有友好搜索引擎seo优化的人来说就好比鸡肋。好在vue的官方出了nuxt,既能让我们使用spa又能拥有良好的搜索引擎优化;nuxt介绍->https://zh.nuxtjs.or...

      Freeman 评论0 收藏0
    • Vue 实用分页组件paging(页数太多时显示省略号)

      摘要:年更新之前的版本在页数太多时依然每一页都显示,这显然不合理。增强版在页数太多时会显示省略号,且把分页组件单独提取出来,可以直接在其他页面引入使用。用下来还是的做法方便一些,不需要绕一下子了。总页数当前页页面初始化函数参考文章 2017年6.26更新: 之前的版本在页数太多时依然每一页都显示,这显然不合理。增强版在页数太多时会显示省略号,且把分页组件单独提取出来,可以直接在其他页面引入使...

      andycall 评论0 收藏0

    发表评论

    0条评论

    最新活动
    阅读需要支付1元查看
    <