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

作者: 红叶丶秋鸣 | 来源:发表于2017-11-14 16:21 被阅读185次
    简单预览

    网上一直再埋怨小程序没有组件化,现在小程序升级了,提供了自定义组件 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)

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

    小程序
    开源地址

    相关文章

      网友评论

        本文标题:小程序自定义评分组件 Component(精度0.1)

        本文链接:https://www.haomeiwen.com/subject/dejfvxtx.html