微信小程序从入门到进阶(三)

数据监听器

通过observers声明数据监听器

使用场景:1、需要监听数据的变化 2、在数据变化之后,进行一些操作的时候

<view wx:for="{
  { listData }}" wx:key="index" class="tab {
  { active === index ? 'active' : '' }}" bindtap="onItemClick" data-index="{
  {index}}">
        {
  {item.label}}
</view>
  /**
    * 1. 监听用户选中项的变化
    * item 点击事件处理
    */
   onItemClick(e) {
   // 1.1:获取用户选中的 下标
   const {
           index
       } = e.target.dataset;
       // 1.2:修改选中项
       this.setData({
           active: index
       })
   }

	/**
     * 1.3:监听 active 的变化
     * 通过 observers 定义数据监听器
     */
    observers: {
        // key 为要监听的数据
        // value 为当数据发生变化时,调用的函数
        active: function (active) {
            // 2:获取用户选中的数据的 `id`
            const {id} = this.data.listData[active]
        }
    }

组件通讯

1、父传子

// 子组件:通过 properties 声明要从父组件中接收的数据
    /**
     * 组件的属性列表
     */
    properties: {
        tabId: String
    },

// 父组件:通过自定义属性的形式传递数据,以子组件中定义的 key 为属性名,以要传递的数据为属性值
   <list tabId="{
  {tabSelectId}}">

2、子传父

// 子组件:通过 triggerEvent 方法发送一个通知,通知父组件接收数据。
// 方法的第一个参数为:通知名
// 方法的第二个参数为:要传递的数据
this.triggerEvent('change', {
    id
})

// 父组件:通过 bind 监听子组件中发送的通知
// bind 后的内容为 子组件发送的通知名,表达式为接收到该通知时所触发的方法
<tabs bind:change="onTabChange"></tabs>
// 方法被触发后可以通过 e.detail 的形式获取子组件传递过来的数据对象
onTabChange (e) {
    const {id} = e.detail;
    this.setData({
        tabSelectId: id
    })
}

3、兄弟传值

  1. 【兄弟 A 组件】传递数据给 父组件(中间人)
  2. 父组件(中间人)再把数据传递给 【兄弟 B 组件】

插槽

1、单一插槽

在组件中使用slot组件定义插槽。

表示:占据了这一块空间,等待父组件填充。

// 使用单一插槽
小程序默认只能定义一个插槽,如果要定义多个插槽那么需要:**在组件中指定 `options` 选项的 `multipleSlots` 选项为 `true`**

然后通过 `slot` 的 `name` 属性为插槽命名。例如:`<slot name="header"></slot>`

2、多个插槽

小程序默认只能定义一个插槽,如果要定义多个插槽那么需要:在组件中指定options选项的 multipleSlots 选项为true

然后通过slot的name属性为插槽命名。例如:

// 使用多个插槽
<component>
    <view slot="header">该元素将被插入到 name=header 的插槽中</view>
    <view slot="footer">该元素将被插入到 name=footer 的插槽中</view>
</component>

相关推荐

  1. 程序入门

    2024-01-25 09:30:02       57 阅读
  2. 程序入门(一)

    2024-01-25 09:30:02       61 阅读
  3. 程序开发入门实战》学习四十

    2024-01-25 09:30:02       65 阅读
  4. 程序开发入门实战》学习六十

    2024-01-25 09:30:02       57 阅读
  5. 程序开发入门实战》学习七十

    2024-01-25 09:30:02       48 阅读
  6. 程序开发入门实战》学习八十

    2024-01-25 09:30:02       53 阅读
  7. 程序程序开发:入门精通

    2024-01-25 09:30:02       54 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-25 09:30:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-25 09:30:02       101 阅读
  3. 在Django里面运行非项目文件

    2024-01-25 09:30:02       82 阅读
  4. Python语言-面向对象

    2024-01-25 09:30:02       91 阅读

热门阅读

  1. 强化学习 - Deep Q Network (DQN)

    2024-01-25 09:30:02       68 阅读
  2. VSCode之PowerShell中创建项目踩坑

    2024-01-25 09:30:02       56 阅读
  3. Oracle按日周月年自动分区

    2024-01-25 09:30:02       53 阅读
  4. docker: 修改容器的端口

    2024-01-25 09:30:02       61 阅读
  5. PiflowX-JdbcCatalog组件

    2024-01-25 09:30:02       47 阅读
  6. MySQL/MariaDB初步

    2024-01-25 09:30:02       52 阅读
  7. uniapp问题杂记

    2024-01-25 09:30:02       61 阅读
  8. OpenCV:绘制图像中mask的最小外接矩形

    2024-01-25 09:30:02       55 阅读
  9. Android 获得通讯录并展示

    2024-01-25 09:30:02       52 阅读
  10. android 自定义键盘长按弹窗

    2024-01-25 09:30:02       51 阅读