小程序 自定义组件封装相关问题?

作者站长头像
站长
· 阅读数 15

我目前有一个demo页面, 点击按钮, 实现简单的抽屉功能

小程序 自定义组件封装相关问题?

小程序 自定义组件封装相关问题?

现在需要做成组件, 方便其他地方调用, 应该如何实现?

drawer.wxml

<view class="wrapper">
   <view class="container">
      <button type="primary" bindtap="onOpenDrawerTap">Open Drawer</button>
   </view>

   <block wx:if="{{ showDrawer }}">
      <view class="mask" bindtap="onMaskTap">
         <!-- 遮罩层 -->
      </view>
      <view class="drawer">
         这里是抽屉内容
      </view>
   </block>
</view>

drawer.wxss

.mask {
   height: 100vh;
   width: 100vw;
   position: fixed;
   left: 0;
   top: 0;
   z-index: 0;
   background-color: var(--black-25);
}

.drawer {
   width: 100%;
   position: fixed;
   bottom: 0;
   z-index: 1;
   background-color: var(--white);
}

/* 以下是允许用户自定义的样式 */
.drawer {
   height: 500rpx;
   padding: 30rpx;
   font-size: var(--font-size-3);
   font-weight: bold;
}

drawer.js

Page({

   data: {
      showDrawer: false
   },

   onOpenDrawerTap() {
      this.setData({
         showDrawer: true
      })
   },

   onMaskTap() {
      this.setData({
         showDrawer: false
      })
   },

   onReady() {
      wx.setNavigationBarTitle({
         title: 'Demo Drawer'
      });
   }

})

希望实现的大概效果如下

wxml

<!-- 触发器 -->
<button type="primary" drawer-content="#example">Open Drawer</button>

<!-- 抽屉内容, 遮罩层默认封装进组件里面 -->
<wxc-drawer id="example">
   <view>这里是抽屉内容</view>
</wxc-drawer>
回复
1个回答
avatar
test
2024-07-16

一般来说,都会提前设置好一些方法或者属性,来起到控制抽屉的打开或者关闭,以及一些遮罩层的功能等等。这些可以通过 props 属性的方式传入到自定义组件当中,例如说 <drawer title="标题文本" :mask="true" :open="drawerVisible">

然后内容部分,简单的可以也可以通过 props 的形式传入,也可以通过 slot 的方式来插入到你的自定义组件当中。👉 组件 wxml 的 slot | 微信开放文档


当然也可以直接使用一些UI组件库提供的 Popup 或者 Half Screen Dialog 组件。

回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容