你知道吗?微信小程序还能向子组件传递函数!

3,350 阅读1分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

早上在研究微信小程序官方文档的时候,无意间发了一个比较好玩的用法:小程序竟然可以向子组件传递函数,子组件调用父组件的方法获取值的方法,个人觉得在复杂开发中这个功能还蛮实用的。也许是我孤陋寡闻,但确实是我的知识盲点,特意记录一下用法,加深记忆。如果有不同看法,欢迎大家一起讨论。

从一个应用场景说起函数传递的使用方法:微信小程序的即时聊天功能,从首页传递一个获取 userInfo 的方法给子组件,onGetUserInfo方法定义在首页,但是在子组件调用,同样可以获取想要的值呢。

子组件:chatroom,传递的函数为 onGetUserInfo。

index.wxml

<chatroom

    style="width: 100%; height: 100%"

    envId="{{chatRoomEnvId}}"

    collection="{{chatRoomCollection}}"

    groupId="{{chatRoomGroupId}}"

    groupName="{{chatRoomGroupName}}"

    userInfo="{{userInfo}}"

    onGetUserInfo="{{onGetUserInfo}}" //将函数作为属性传递给子组件

    getOpenID="{{getOpenID}}"

  ></chatroom>

index.js

// 首页定义的获取userinfo的方法

onGetUserInfofunction(e) {

    if (!this.logged && e.detail.userInfo) {

      this.setData({

        loggedtrue,

        avatarUrl: e.detail.userInfo.avatarUrl,

        userInfo: e.detail.userInfo

      })

    }

  },

在chatroom中使用该函数的方法:

chatroom.wxml

<button 

open-type="getUserInfo" 

bindgetuserinfo="onGetUserInfo"

class="userinfo"

>请先登录后参与聊天</button>

chatroom.js

properties{

     onGetUserInfo: {

      typeFunction,

    },
}
methods: {

    onGetUserInfo(e) {

      this.properties.onGetUserInfo(e)

    },
}

为了大家看着方便,省去了大部分冗余代码,只贴出了部分核心代码,如果想要查看详情代码,请移步官网。

图片.png