关键词搜索

全站搜索
×
密码登录在这里
×
注册会员
×

已有账号? 请点击

忘记密码

已有账号? 请点击

使用其他方式登录

微信小程序组件的封装暴露方法父组件调用

发布2022-06-01 浏览546次

详情内容

微信小程序组件的封装暴露方法父组件调用,在组件使用时怎么封装自己子组件方法并暴露方法父组件调用呢?

1.应用场景

我们在开发时,封装一个公共底部组件,该组件拥有两个部分,第一部分是电话报名,第二部分是表单报名。我们需要在很多页面中使用这个组件,并且电话报名和表单报名逻辑是不同的,只有样式是相同的。
此时,我们可以令这个组件暴露出两个方法供外部调用。
在这里插入图片描述

2.组件封装

html文件

comp.wxml

<!--底部报名表单组件-->
<view class="tapplyfooter">
  <view class="tapplyfooter-left">
    ...
  </view>
  <view class="tapplyfooter-center" 
    catchtap="callGroupNow" 
  >
    <image class="tapplyfooter-center-img" src="../../../assets/common/phone-white.svg" />
  </view>
  <button 
    class="tapplyfooter-right" 
    open-type="getPhoneNumber" 
    bindgetphonenumber="getApplyPhoneNumber"
  >
    表单报名
  </button>
</view>


js文件,暴露方法出去

// components/common/TApplyFooter/TApplyFooter.js
Component({
	  properties: {
	  },
	  data: {
	  },
  methods: {
    // 报名咨询
    callGroupNow:function(){
      this.triggerEvent('callGroupNow');   //将这个方法暴露出去,在父组件使用bindcallGroupNow调用
    },
    getApplyPhoneNumber:function(e){
      this.triggerEvent('getApplyPhoneNumber',e); //将这个方法暴露出去,在父组件使用bindcallGroupNow调用,e是传递出去的数据
    }
  }
})


less文件,样式设置

comp.less

button::after{ border: none; }			// 去除button按钮默认边框
.tapplyfooter{
  padding-bottom: constant(safe-area-inset-bottom); /* 兼容 iOS < 11.2 */    底部安全距离
  padding-bottom: env(safe-area-inset-bottom); /* 兼容 iOS >= 11.2 */		底部安全距离
  position: fixed;
  bottom: 0;
  height: 120rpx;
  width: 100%;
  background: #ffffff;
  display: flex;

  &-left{
    width:308rpx;
    padding: 24rpx 32rpx;
    display: flex;
    align-items: center;
    .hasMarginImage{
      margin-right: 18rpx;
    }
  }

  &-center{
    flex-shrink: 0;
    width: 166rpx;
    background: linear-gradient(139deg, #94D56E 0%, #B0DD68 100%);
    display: flex;
    justify-content: center;
    align-items: center;

    &-img{
      display: inline-block;
      width: 48rpx;
      height: 48rpx;
    }
  }

  &-right{
    background: linear-gradient(139deg, #FFA544 0%, #FF781E 100%);
    width: 276rpx;
    text-align: center;
    line-height: 120rpx;
    color: #FFFFFF;
    font-size: 32rpx;
    border-radius: 0 !important;
    border: none !important;
    outline: none !important;
  }
}


3.父组件中引入

3.1 在app.json中将该组件注册

"t-apply-footer":"/components/common/TApplyFooter/TApplyFooter",


3.2 在页面中引入该组件

页面中引入该组件,并使用bind[暴露方法]形式定义该方法,bindcallGroupNow引用方法,callGroupNow页面中要执行的方法操作

page.wxml:

  <t-apply-footer 
  	bindcallGroupNow="callGroupNow" 
  	bindgetApplyPhoneNumber="getApplyPhoneNumber"
  />


page.js

callGroupNow: async function () {},				
getApplyPhoneNumber: async function (e) {},   // e为暴露方法时传递过来的参数

这样就实现了,微信小程序组件的封装暴露方法父组件调用了

点击QQ咨询
开通会员
返回顶部
×
  • 微信支付
微信扫码支付
微信扫码支付
请使用微信描二维码支付
×

提示信息

×

选择支付方式

  • 微信支付
确定支付下载