微信小程序-传递数据子传父

在看到此篇文章之前,如果你学习过了 Vue,那么这个内容对你而言就是切菜一样简单,老样子,我们先搭建我们的组件,然后在来看需要介绍的知识点。

创建自定义组件

新建 c-demo:

页面的内容大致就是给一个 view 组件绑定了一个点击事件,点击的时候调用 onTitleTap,在组件当中方法的定义要写在 methods 当中这里是一个注意点,然后通过 mark:xxx 的方式传递了数据。

<!-- 
  c-demo.wxml
 -->
<view>
  <view 
  bindtap="onTitleTap"
  mark:abc="{{title}}"
  >我是 demo 的 title view {{title}}</view>
  <view>我是 demo 的 content view {{content}}</view>
</view>

JS:

在我们的触发方法当中,我们拿到了传递的数据,然后通过 this.triggerEvent("demoTitleClick", curTitle); 主动触发事件的方式传递了一个 title 数据给调用者。

// components/c-demo/c-demo.js
Component({
  /**
   * 组件的初始数据
   */
  data: {
    title: 'BNTang',
    content: 'BNTang content'
  },
  /**
   * 组件的方法列表
   */
  methods: {
    onTitleTap(e) {
      console.log("触发了 c-demo 的 onTitleTap", e);
      const curTitle = e.mark.abc;
      console.log("拿到了当前点击的标题内容:", curTitle);
      this.triggerEvent("demoTitleClick", curTitle);
    }
  }
})

首页的 WXML:

我在首页当中使用了上面新建的 c-demo 组件,绑定了在 c-demo 当中自定义的事件。

<!-- 
  index.wxml
 -->
<myDemo bind:demoTitleClick="sectionTitleClick"/>

首页的 JS:

在 c-demo 的自定义事件当中,传递了一个数据到事件对象中,这里我们可以通过 事件对象.detail 的方式进行获取数据。

// index.js
Page({
  sectionTitleClick(e) {
    console.log("页面监听到了组件触发的事件");
    console.log("在页面中拿到了自定义组件传递过来的数据", e.detail);
  }
})

总结

?> 想从组件中传递数据给页面,只需要在组件中通过 this.triggerEvent("自定义事件名称", "传递的数据"); 这种方式主动触发自定义事件,然后在页面使用这个组件的时候,绑定 triggerEvent 主动触发的自定义事件,就可以在绑定的自定义事件监听方法中,通过事件对象拿到组件传递过来的数据了。

image-20230514160747932

posted @   BNTang  阅读(107)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示