【小程序】自定义组件及组件间传递数据

在小程序中,类似<view>、<button>、<text>这些标签,统称为组件,丰富的组件构成了页面文件wxml。

小程序自基础库版本 1.6.3起支持自定义组件,开发者可以将某个功能模块抽象成一个自定义组件,以便在不同的页面中重复使用。

自定义组件和页面一样,都有着wxml、js、json、wxss四个文件。

 1.自定义组件

  • 自定义组件

"component": true,

自定义组件要先将组件所在页面的json文件中的【component】字段设为true

<!--components/component.wxml-->
<!-- 自定义一个名为“comp”的组件 -->
<view class="comp">
  <text>这是组件</text>
  <button>点击</button>
</view>

在【component.wxml】中声明一个名为【comp】的组件

  • 注册组件

组件有局部和全局之分,局部组件只能在特定页面使用,而全局组件可以在所有页面使用。

  "usingComponents": {
    "comp":"/components/component"
  }

全局组件在【app.json】文件中的【usingComponents】字段注册,格式为———"组件名" : "组件路径"。

同理,局部组件在页面的json文件中注册。

  • 使用组件

<!--pages/home.wxml-->
<!-- 使用自定义组件 -->
<comp></comp>

在【home.wxml】中使用自定义组件

2.组件间传递数据

组件间传递数据是双向的,即父组件→子组件子组件→父组件

父组件是调用自定义组件的页面,而子组件是被调用的自定义组件。

  • 父组件向子组件传递数据

        父组件发送数据

// pages/home.js
Page({
  data:{
    msg:'父组件的数据'
  }
})

上述是父组件js文件中名为【msg】的字符串

<!--pages/home.wxml-->
<comp msg="{{ msg }}"></comp>

在使用自定义组件时通过插值表达式将数据传递给子组件       

        子组件接收数据

// components/component.js
Component({
  properties: {
    msg:{}
  }
})

子组件在js文件的【properties】字段声明一个用来接收数据的属性【msg】

<!--components/component.wxml-->
<!-- 自定义一个名为“comp”的组件 -->
<view class="comp">
  <text>这是组件</text>
  <button>点击</button>
  <text>{{ msg }}</text>
</view>

在<text>标签中使用插值表达式展示父组件传递过来的数据

  • 子组件向父组件传递数据

        父组件接收数据

<!--pages/home.wxml-->
<!-- 使用自定义组件 -->
<comp bind:myEvent="getData"></comp>

使用子组件时绑定触发事件并对其进行监听,触发事件为【myEvent】,监听方法为【getData】

// pages/home.js
Page({
  data:{
    msg:'父组件的数据',
    info:{}
  },

  // 监听触发事件的方法
  getData(e){
    this.setData({
      info:e.detail.info
    })
  }
})

在js中声明一个【info】对象,用来储存子组件传递过来的数据,定义监听方法将传递数据赋值给【info】

        子组件发送数据

// components/component.js
Component({
  data: {
    info:'子组件的数据'
  },

  lifetimes:{
    attached:function(){
      /* triggetEvent()参数:
      1.指定事件名、
      2.detail对象、
      3.事件选项(可选) */
      this.triggerEvent(
        'myEvent',{info:this.data.info}
      )
    }
  }
})

在子组件js中使用【this.triggerEvent()】方法向触发事件【myEvent】的监听方法【getData()】传递数据。

【this.triggerEvent()】有三个参数:

  1. 指定事件名
  2. 要传递的数据
  3. 事件选项(可选)

字段【lifetimes】是组件的生命周期,【attached】代表方法在组件实例进入页面节点树时执行。

3.参考资料:

组件间通信与事件 | 微信开放文档

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cimoon_

一分也是爱,用钱砸我

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值