小程序自定义组件配合插槽和组件传值

创建组件目录

首先,在项目的 components 目录下创建一个新的文件夹来存放你的组件

/components/
  └── my-component/
        ├── my-component.wxml
        ├── my-component.wxss
        ├── my-component.js
        └── my-component.json

自定义组件 

1.my-component.wxml

<view class="my-component" bindtap="handleTap">
  <!-- 显示传入的 title 属性值 -->
  <text>{{title}}</text>

  <!-- 显示点击次数 -->
  <text>点击次数: {{count}}</text>

  <!-- 默认插槽 -->
  <slot>
    <text>默认插槽内容:这里可以放置自定义内容</text>
  </slot>

  <!-- 具名插槽,放置在底部的内容 -->
  <view class="footer">
    <slot name="footer">
      <text>默认底部内容</text>
    </slot>
  </view>
</view>

2. my-component.js 

Component({
  // 定义组件的属性
  properties: {
    title: {
      type: String,
      value: '默认标题' // 默认值
    }
  },
  data: {
    // 组件内部的数据
    count: 0 // 用于展示点击次数
  },
  methods: {
    // 自定义方法
    // 处理点击事件
    handleTap() {
      // 每次点击增加 count
      this.setData({
        count: this.data.count + 1
      });

      // 触发自定义事件,传递数据给父组件
      this.triggerEvent('tapEvent', { count: this.data.count, message: '组件被点击了' });
    }
  }
});

3. my-component.json (配置)

{
  "component": true, # 声明这是一个自定义组件
  "options": {
    "multipleSlots": true # 允许使用多个插槽
  }
}

使用插槽的页面示例

1. index.json (配置)

{
  "usingComponents": {
    "my-component": "/components/my-component/my-component" # 声明组件路径
  }
}

2.index.wxml

<view>
  <!-- 使用自定义组件,并传递 props -->
  <my-component title="插槽和通信示例" bind:tapEvent="onComponentTap">
    <!-- 自定义默认插槽内容 -->
    <view slot>
      <text>自定义的插槽内容:这个内容将替换默认插槽的内容</text>
    </view>

    <!-- 自定义具名插槽内容 -->
    <view slot="footer">
      <text>自定义的底部内容:这个内容将替换默认的底部内容</text>
    </view>
  </my-component>

  <!-- 显示从组件获取的点击信息 -->
  <view>
    <text>从组件获取的点击信息:{{ tapInfo }}</text>
  </view>
</view>

3.index.js

Page({
  data: {
    tapInfo: '' // 存储从组件获取的信息
  },

  // 处理来自子组件的事件
  onComponentTap(event) {
    // 获取子组件传递的 count 和 message 数据
    const { count, message } = event.detail;
    
    // 将信息更新到页面的 tapInfo 数据中
    this.setData({
      tapInfo: `${message},点击次数:${count}`
    });
  }
});

  • 18
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值