【微信小程序】自定义组件Component的使用

前言

之前有一篇博文介绍了小程序中模板template的使用。在使用的时候,虽然可以实现与组件相同的显示功能,但是template没有自己的生命周期,在操作模板上的控件时,事件的传递不好处理,而这些不方便都可以通过组件component来代替,先看一波效果图。


这里写图片描述

实现


1、创建component组件

这里写图片描述

如上图创建components文件夹,home-item就是最上面效果图的条目的组件模块。这里可以发现,和普通页面一样,组件也可以创建四个文件。在js文件中可以进行数据的绑定与父组件的交互。

home-item.json


{
  "component": true, 
  "usingComponents": {}  //可以使用其他组件
}

home-item.js


//(Component构造器)
Component({
  //一些组件选项
  options: {
    multipleSlots: true // 在组件定义时的选项中启用多slot支持
  },
  
  //组件的对外属性,属性设置中可包含三个字段,type 表示属性类型、 value 表示属性初始值、 observer 表示属性值被更改时的响应函数	
  properties: {
    // 活动封面
    coverUrl: {
      type: String,
      value: "http://img.youpenglai.cn/meetingpic/0b24376c43b1c372076aa65253b2f0ca123.jpg"
    },

    // 活动标题
    activityTitle: {
      type: String,
      value: "我是Title"
    },

    // 打卡时间范围
    signTimeRange: {
      type: String,
      value: "00:00-23:59"
    },

    // 是否是组织者
    organizerStatus: {
      type: Number,
      value: 0
    },

    // 是否是组织者
    signTimes: {
      type: Number,
      value: 0
    },

    // 打卡状态
    signStatus: {
      type: Number,
      value: 0
    }
  },
  //组件的内部数据,和 properties 一同用于组件的模版渲染
  data:{
    isShowOrganizer:false,
  },
  //组件的方法,包括事件响应函数和任意的自定义方法	
  methods: {
    // 跳转活动详情  
    activityDetailTap: function(e) {
      var currentPosition = e.currentTarget.dataset.currentPosition
      this.triggerEvent('signEvent', {
        'currentPosition': currentPosition
      })
    }
  }
  // 组件生命周期函数,可以为函数,或一个在methods段中定义的方法名
  attached: function(){},
  moved: function(){},
  detached: function(){},

})

在这里wxmlwxss文件就不介绍了。看下父页面如何引用子组件。

home.json

父组件的json文件中引入组件


"usingComponents":{
	 "home-item":"../components/home-item/home-item"
}

home.wxml


<!-- 首页列表 -->
<view class='join-layout'>
  <block wx:for="{{joinDatas}}" wx:for-item="joinItem">
 <!-- 这里是引入的组件名称 -->
    <home-item id="homeItem"
   <!--绑定子组件发出的事件-->
   bind:signEvent="signEvent" 
         coverUrl='{{joinItem.dakaPic}}'
         activityTitle='{{joinItem.dakaName}}'
         signTimeRange='{{joinItem.dakaTimeRange}}'
         organizerStatus='{{organizerStatus}}'
         signTimes='{{joinItem.dakaNum}}'
         signStatus='{{joinItem.status}}'>
  </home-item>
</block>
</view>
  

home.js


//父组件接收子组件的事件进行相应的操作
signEvent: function(e) {
  // 获取点击的打卡位置
  var signPosition = e.detail.currentPosition
  var dakaBean = this.data.joinDatas[signPosition]
  // 已经打卡
  wx.navigateTo({
    url: '../detail/joined-detail/joined-detail?actId=' + dakaBean.actId,
  })
}
  

父子组件之间需要做事件的传递,首先是在子组件中通过this.triggerEvent('signEvent', { }) 来发送事件,父组件在子组件上进行事件绑定,在js文件中来响应事件。

获取数据的方式这里不做介绍,上述代码是父组件的wxml中对子组件进行数据绑定,上述的coverUrl等参数是在组件中声明的属性值,这里作传值用。组件的引入只需要在父组件的json文件中通过usingComponents引入,不需要像使用templatewxmlwxss中将子组件的wxml布局和wxss样式也引入。


总结

~~

微信小程序自定义组件是一种可以复用的UI组件,可以在不同的页面中使用。在微信小程序中,我们可以通过使用`Component`函数来创建自定义组件。 要创建一个自定义组件,你需要在`components`目录下创建一个新的文件夹,并在该文件夹中创建一个`.json`、`.wxml`、`.wxss`和`.js`文件。其中,`.json`文件用于配置组件的属性、样式等信息,`.wxml`文件用于定义组件的结构,`.wxss`文件用于定义组件的样式,`.js`文件用于编写组件的逻辑。 在`.json`文件中,你可以配置组件的属性、样式等信息。例如: ```json { "component": true, "usingComponents": {}, "properties": {}, "data": {}, "methods": {} } ``` 在`.wxml`文件中,你可以使用标签和组件来定义组件的结构,并通过`{{}}`来绑定数据。例如: ```xml <view> <text>{{title}}</text> </view> ``` 在`.wxss`文件中,你可以定义组件的样式。例如: ```css text { color: #333; font-size: 16px; } ``` 在`.js`文件中,你可以编写组件的逻辑代码。例如: ```javascript Component({ properties: {}, data: {}, methods: {} }) ``` 然后,在需要使用自定义组件的页面中引入组件,并在页面的`.json`文件中配置组件的路径。例如: ```json { "usingComponents": { "custom-component": "/components/custom-component/custom-component" } } ``` 最后,在页面的`.wxml`文件中使用自定义组件。例如: ```xml <custom-component title="Hello World"></custom-component> ``` 这样就完成了一个简单的微信小程序自定义组件的创建和使用。希望能对你有所帮助!如果有更多问题,请随时提问。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值