小程序自定义评分组件 Component(精度0.1)

简单预览

网上一直再埋怨小程序没有组件化,现在小程序升级了,提供了自定义组件 Component,目前处于公测阶段。今天体验一回,将之前使用 template 写的评分组件重写了下。
小程序自定义评分组件 template(精度0.1)

从小程序基础库版本 1.6.3 开始,小程序支持简洁的组件化编程。

自定义组件

自定义组件类似页面,由 json wxml wxss js 4个文件组成。

  1. rating.json
    必需在 json 文件中声明为组件

    {
        "component": true
    }
    
  2. rating.wxml
    wxml 文件中编写布局

    <view class='com-rating'>
      <view class='rating-icon' wx:for='{{[1,2,3,4,5]}}' wx:key='*this'
        bindtap='_handleTap' data-num='{{item}}'>
        <view class='rating-on' style='width:{{rating >= (max/5)*item ? 1 : rating < (max/5)*(item-1) ? 0 : (rating*10)%(max/5*10)/(max/5*10)}}em'>
          <image src='./../../images/rating_on_icon.png' mode='widthFix' style='width:1em' />
        </view>
        <view class='rating-off' style='width:1em;'>
          <image src='./../../images/rating_off_icon.png' mode='widthFix' style='width:1em' />
        </view>
      </view>
    </view>
    
  3. rating.wxss
    修饰组件样式

    .com-rating {
      display: inline-block;
      letter-spacing: .3em;
      position: relative;
    }
    .com-rating .rating-icon,
    .com-rating .rating-on,
    .com-rating .rating-off {
      display: inline-block;
    }
    .com-rating .rating-icon:not(:last-child) {
      margin-right: .2em;
    }
    .com-rating .rating-on {
      color: black;
      position: absolute;
      overflow: hidden;
      padding: 0;
      margin: 0;
    }
    .com-rating .rating-off {
      color: #DBDBDB;
      padding: 0;
      margin: 0;
    }
    
  4. rating.js
    初始化组件属性及事件

    Component({
      // 声明组件属性及默认值
      properties: {
        rating: {
          type: Number,  // 必需 指定属性类型 [String, Number, Boolean, Object, Array, null(任意类型)]
          value: 10
        },
        max: {
          type: Number,
          value: 5
        },
        disabled: {
          type: Boolean,
          value: false
        }
      },
    
      // 组件私有和公开的方法,组件所使用的方法需在此声明
      methods: {
        _handleTap: function (e) {
          if (this.data.disabled) return;
          const { max } = this.data;
          const { num } = e.currentTarget.dataset;
          this.setData({
            rating: max / 5 * num
          })
          // 自定义组件事件
          this.triggerEvent('change', { value: max / 5 * num }, e);
        }
      }
    
    })
    

使用

组件除了在 page 中使用外,在组件中也可以使用。以 page 举例。

  1. .json
    在 json 文件中需声明组件

    {
      "usingComponents": {
        "com-rating": "/components/rating/rating"
      }
    }
    
  2. .wxml

    <!-- bindchange 事件需与组件中定义的自定义事件保持一致,如组件定义的 change,这里使用的是 bindchange -->
    <com-rating max="10" rating='6.5' bindchange='handleChange' />
    
  3. .js
    在 js 文件中监听事件

    /**
     *@param {Object} e 组件自定义事件传递的数据
     */
    handleChange: function(e) {
        this.setData({
          rating: e.detail.value
        })
     }
    

组件样式有限制,这里没有使用 FontAwesome,如需使用字体图标可查看小程序自定义评分组件 template(精度0.1)

更多使用可以查看我开源的小程序

小程序

开源地址

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,233评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,013评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,030评论 0 241
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,827评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,221评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,542评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,814评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,513评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,225评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,497评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,998评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,342评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,986评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,055评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,812评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,560评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,461评论 2 266

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,099评论 18 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 170,563评论 25 707
  • afinalAfinal是一个android的ioc,orm框架 https://github.com/yangf...
    passiontim阅读 15,078评论 2 44
  • #幸福是需要修出来的~每天进步1% 20170906 【幸福三朵玫瑰】 昨日玫瑰采摘2朵 今日3朵玫瑰 补房产课作...
    幸福实修王迪阅读 168评论 0 0
  • 第一声积雪化为浮云 蝈蝈还没睡醒 我,铺开万里无云 一日长三寸 一寸懵懂 一寸相思,还有 一寸六月里的笛音 我日日...
    蓝朵世界阅读 652评论 44 50