最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 小程序自定义组件

    正文概述 掘金(HMGDCR598)   2021-01-04   431

    一:定义组件

    miniprogram下的目录下创建一个components文件夹,与pages目录同级,这个文件夹专门是用来放自定义组件的 例如:在components目录下创建了一个count文件夹,然后在新建Component,组件名称命名为count,微信开发者工具会自动的创建count组件

    // =============count.wxml==================
    <view>
      <view class="count-container">
        <view bindtap="reduce" class="{{count == 1? 'btn-disabled': ''}}}">-</view>
        <input bindinput="handleInput" type="number" value="{{count}}" />
        <view bindtap="add">+</view>
      </view>
    </view>
    
    // =============count.js================
    
    // components/count/count.js
    Component({
      /**
       * 组件的属性列表
       */
      properties: {
        count: Number,
      },
    
      /**
       * 组件的初始数据
       */
      data: {},
    
      /**
       * 组件的方法列表
       */
      methods: {
        reduce() {
          var count = this.data.count - 1;
          if (count < 1) {
            count = 1;
          }
          this.setData({
            count,
          });
          this.triggerEvent('changeCount', count);
          console.log(this.data.count);
        },
    
        add() {
          var count = this.data.count + 1;
          this.setData({
            count,
          });
          this.triggerEvent('changeCount', count);
          console.log(this.data.count);
        },
    
        handleInput(event) {
          this.setData({
            count: event.detail.value,
          });
          this.triggerEvent('changeCount', event.detail.value); // 向外暴露函数
        },
      },
    });
    
    
    

    二:使用组件

    pages目录下,这里我创建了一个customComponents页面

    在要使用页面对应的customComponents.json中的usingComponents自定义组件的名称,同时引入组件的路径

    // customComponents.json
    {
      "usingComponents": {
        "count":"/components/count/count"
      }
    }
    
    
    // customComponents.wxml
    
    <count count="{{countNum}}" bind:changeCount="handleCount"></count>
    <view class="parentText">父组件count:{{countNum}}</view>
    
    
    ****// pages/customComponents/customComponents.js
    Page({
      /**
       * 页面的初始数据
       */
      data: {
        countNum: 1,
      },
    
      /**
       * 生命周期函数--监听页面加载
       */
      onLoad: function(options) {},
    
      // 父组件中自定义绑定的事件
      handleCount(event) {
        this.setData({
          countNum: event.detail, // 获取子组件传递过来的值
        });
      },
    });
    
    

    三:小程序中组件的通信与事件

    • 父传子

      • wxml数据绑定:用于父组件向子组件指定属性设置数据,在子组件中properties对象接收外部(父)组件传过来的自定义属性数据,可以是对象,数组,基本数据类型等。

      注释: properties类似于vue中的props,react中的this.props

    • 子传父

      • 事件: 用于子组件通过 this.triggerEvent()向父组件传递数据,可以传递任意数据,父组件通过绑定绑定监听事件,从而触发父组件自定义事件,event.detail是子组件传递过来的值。

      注意: triggerEvent,就相当于vue中的this.$emit('绑定在父组件自定义事件名称',携带的数据)方法的,而在React中是通过this.props.方法接收,调用父组件的方法。

    • 在父组件中还可以通过this.selectComponent("类名或ID")方法获取子组件的实例对象,这样在父组件中不必通过event.detail的方式获取,可以直接访问子组件任意的数据和方法。

    前提条件:

    需要在父组件的引用自定义组件上,添加classid

    <count
     class="count"
     count="{{countNum}}"
     bind:changeCount="handleCount"
    ></count>
    
    

    那么,在父组件中的handleCount中里调用 this.selectComponent,获取子组件的实例数据

    调用时需要传入一个匹配选择器 classId都可以,如,this.selectComponent('类或ID')

     handleCount(){
        var count = this.selectComponent('.count'); // 获取子组件的实例
        this.setData({
          countNum: count.data.count  // 重新赋值setData countNum数据
        })
    
      }
    
    

    起源地下载网 » 小程序自定义组件

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元