小程序的父子之间的传值调用

2023-11-11

前言:

      我们在小程序中父子组件之间的传值方法。

目录:

父传子 :properties

步骤:

1、在父组件 index.wxml里面给调用子组件的地方绑定一个字段map

2、在父组件 index.js中定义字段map,并用this.setData改变这个值

3、在子组件 map.js中定义properties接收我们绑定的值

4、在子组件 map.js中通过this.data.map调用properties的字段

父调子方法

1、在父组件 index.wxml里面给调用子组件的地方添加id名

2、index.js中些调用方法,  跟vue的ref有点类似

子传父: triggerEvent

步骤:

1、在子组件 map.wxml 里面写按钮调用事件

2、在子组件 map.js 里面写方法,并将数据 123提交上去

3、在父组件 index.wxml 里面接收事件

4、在父组件 index.js 中定义abc方法

官网api:


父传子 :properties

步骤:

1、在父组件 index.wxml里面给调用子组件的地方绑定一个字段map

 <b-map map="{{map}}"></b-map>

2、在父组件 index.js中定义字段map,并用this.setData改变这个值

Page({
    data: {
        map:'',//定位信息

    },
    onLoad: function(params){
        var app = getApp();
        let map = app.globalData.map;
        if(map){
            this.setData({
                map:map,
                now_position:map.title,
            })
        }

    },


...

3、在子组件 map.js中定义properties接收我们绑定的值

Component({
  properties:{
    map:Object
  },
...

4、在子组件 map.js中通过this.data.map调用properties的字段

 let map = this.data.map;

父调子方法

1、在父组件 index.wxml里面给调用子组件的地方添加id名

 <b-map id="bmap" map="{{map}}"></b-map>

2、index.js中些调用方法,  跟vue的ref有点类似

 this.selectComponent(' ')  获取到 id为 bmap 的这个元素

setNowPostion() 子组件的方法
this.selectComponent('#bmap').setNowPostion();

子传父: triggerEvent

步骤:

1、在子组件 map.wxml 里面写按钮调用事件

<view bindtap="aaa">
    <button>子调用父的方法</button>
</view>

2、在子组件 map.js 里面写方法,并将数据 123提交上去

 aaa: function(){
      this.triggerEvent('abc',123);
    },

3、在父组件 index.wxml 里面接收事件

<b-map map="{{map}}" bind:abc="abc"></b-map>

4、在父组件 index.js 中定义abc方法

Page({ 
    abc(res){
        let data = res.detail;
        debugger
    }
...

官网api:入口

组件间通信

组件间的基本通信方式有以下几种。

  • WXML 数据绑定:用于父组件向子组件的指定属性设置数据,仅能设置 JSON 兼容数据(自基础库版本 2.0.9 开始,还可以在数据中包含函数)。具体在 组件模板和样式 章节中介绍。
  • 事件:用于子组件向父组件传递数据,可以传递任意数据。
  • 如果以上两种方式不足以满足需要,父组件还可以通过 this.selectComponent 方法获取子组件实例对象,这样就可以直接访问组件的任意数据和方法。

监听事件

事件系统是组件间通信的主要方式之一。自定义组件可以触发任意的事件,引用组件的页面可以监听这些事件。关于事件的基本概念和用法,参见 事件 。

监听自定义组件事件的方法与监听基础组件事件的方法完全一致:

代码示例:

<!-- 当自定义组件触发“myevent”事件时,调用“onMyEvent”方法 -->
<component-tag-name bindmyevent="onMyEvent" />
<!-- 或者可以写成 -->
<component-tag-name bind:myevent="onMyEvent" />
Page({
  onMyEvent: function(e){
    e.detail // 自定义组件触发事件时提供的detail对象
  }
})

触发事件

自定义组件触发事件时,需要使用 triggerEvent 方法,指定事件名、detail对象和事件选项:

代码示例:

在开发者工具中预览效果

<!-- 在自定义组件中 -->
<button bindtap="onTap">点击这个按钮将触发“myevent”事件</button>
Component({
  properties: {},
  methods: {
    onTap: function(){
      var myEventDetail = {} // detail对象,提供给事件监听函数
      var myEventOption = {} // 触发事件的选项
      this.triggerEvent('myevent', myEventDetail, myEventOption)
    }
  }
})

触发事件的选项包括:

选项名 类型 是否必填 默认值 描述
bubbles Boolean false 事件是否冒泡
composed Boolean false 事件是否可以穿越组件边界,为false时,事件将只能在引用组件的节点树上触发,不进入其他任何组件内部
capturePhase Boolean false 事件是否拥有捕获阶段

关于冒泡和捕获阶段的概念,请阅读 事件 章节中的相关说明。

代码示例:

在开发者工具中预览效果

// 页面 page.wxml
<another-component bindcustomevent="pageEventListener1">
  <my-component bindcustomevent="pageEventListener2"></my-component>
</another-component>
// 组件 another-component.wxml
<view bindcustomevent="anotherEventListener">
  <slot />
</view>
// 组件 my-component.wxml
<view bindcustomevent="myEventListener">
  <slot />
</view>
// 组件 my-component.js
Component({
  methods: {
    onTap: function(){
      this.triggerEvent('customevent', {}) // 只会触发 pageEventListener2
      this.triggerEvent('customevent', {}, { bubbles: true }) // 会依次触发 pageEventListener2 、 pageEventListener1
      this.triggerEvent('customevent', {}, { bubbles: true, composed: true }) // 会依次触发 pageEventListener2 、 anotherEventListener 、 pageEventListener1
    }
  }
})

获取组件实例

可在父组件里调用 this.selectComponent ,获取子组件的实例对象。(插件的自定义组件将返回 null

调用时需要传入一个匹配选择器 selector,如:this.selectComponent(".my-component")

selector 详细语法可查看 selector 语法参考文档

代码示例:

在开发者工具中预览效果

// 父组件
Page({
  data: {},
  getChildComponent: function () {
    const child = this.selectComponent('.my-component');
    console.log(child)
  }
})

在上例中,父组件将会获取 class 为 my-component 的子组件实例对象,即子组件的 this 。

若需要自定义 selectComponent 返回的数据,可使用内置 behaviorwx://component-export

从基础库版本 2.2.3 开始提供支持。

使自定义组件中支持 export 定义段,这个定义段可以用于指定组件被 selectComponent 调用时的返回值。

代码示例:

在开发者工具中预览效果

// 自定义组件 my-component 内部
Component({
  behaviors: ['wx://component-export'],
  export() {
    return { myField: 'myValue' }
  }
})
<!-- 使用自定义组件时 -->
<my-component id="the-id" />
// 父组件调用
const child = this.selectComponent('#the-id') // 等于 { myField: 'myValue' }

在上例中,父组件获取 id 为 the-id 的子组件实例的时候,得到的是对象 { myField: 'myValue' } 。

到此结束!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

小程序的父子之间的传值调用 的相关文章

  • OCR字符识别

    OCR字符识别 流程 流程 读取图片并转灰度图 dev close window read image Image20230324222437 F halcon halconStudy 联想截图 20230324222437 png get
  • 关于druid的一些设置(idea版本)

    关于druid的一些设置 idea版本 1 首先是加入依赖
  • CTF Show Web6

    也是一道备份文件泄露的题目 在提示中可以看的很清楚 解压源码到当前目录 测试正常 收工 在上一题的wp中 看到了工具fzbk 使用之后发现所有备份文件都返回200 问了问群主之后发现这是nginx服务器的设置 遇到不存在的路径就直接跳转到默
  • Numpy中argsort()函数的用法

    argsort 函数的作用是将数组按照从小到大的顺序排序 并按照对应的索引值输出 argsort 函数中 当axis 0时 按列排列 当axis 1时 按行排列 如果省略默认按行排列 下边通过例子来说明其用法 usr bin env pyt

随机推荐

  • SpringBoot工程实现aop进行日志记录

    前言 我是在做某培训机构的外卖项目自己新增的一个功能 上网查了很多资料 资料很丰富但有些东西没有解释清楚 于是我花了一个晚上把那些大佬代码里面没有解释清楚的地方加了很多注解 仅供初学者参考 准备工作 0 建议了解一下aop的一些知识 以下代
  • Linux 中list.h使用实例和坑

    以前都是自己写链表或者所用框架都自带链表操作 本次工作换了框架没有找到框架自带的链表操作 所以尝试使用linux自带的list h中定义的相关宏和函数写了简单的链表操作 竟然踩坑了 记录一下 一 list h简介 list h一般放在inc
  • this plugin is not a production of jetbrains

    用不了ASM Bytecode Outline插件 不知道为什么 弄了半天没弄出来 求助
  • 基于 ThreadLocal 实现一个上下文管理组件

    本文基于ThreadLocal原理 实现了一个上下文状态管理组件Scope 通过开启一个自定义的Scope 在Scope范围内 可以通过Scope各个方法读写数据 通过自定义线程池实现上下文状态数据的线程间传递 提出了一种基于Filter和
  • Numpy中排序操作partition,argpartition,sort,argsort

    Numpy中的排序相关操作sort argsort partition argpartition 1 np sort 2 np argsort 3 np partition 4 argpartition 今天遇见的程序里某一行需要用到num
  • A Survey on Metaverse: Fundamentals, Security, and Privacy

    本文针对 A Survey on Metaverse Fundamentals Security and Privacy 的翻译 元宇宙综述 基础 安全和隐私 摘要 1 引言 A 保护元宇宙的挑战 B 相关工作 2 元宇宙综述 A 现有元宇
  • 实心球体内部电势计算公式_电化学热力学-关于电势的一切

    电势这个概念在电化学中无处不在 但是要正确理解它并不是一件容易的事情 电势到底是什么东西 它是怎么产生的 我们怎么测量它 它有什么应用 它和其他热力学常数 Gibbs自由能 反应平衡常数 有什么关联 它和电荷又有什么关联 液接电势又是什么
  • 简单的光线追踪绘制场景

    RayTracing Time 2020 11 23 Author lwk Email 1293532247 qq com Software PyCharm CPU Razon R5 4600U 计算机图形学第二次大作业 简单的光线追踪程序
  • Flex实践—ActionScript函数功能

    上一次做了一个Flex的beautiful 页面 还记得不 这次要做的功能在上图的Diary 文本框中有介绍 这里就不做描述了 准备工作和上一次的一样 这一次添加了两个button Hide Title Show Title 下面为实现这两
  • Tomcat shutdown port 8005这个端口可以关掉吗?

    官网解释 The TCP IP port number on which this server waits for a shutdown command Set to 1 to disable the shutdown port Note
  • 野火-Stm32

  • 使用navicat连接oracle时,解决报错listener does not currently know of service

    原因 监听程序当前无法识别连接描述符中请求的服务 解决方案 1 在Oracle下载目录下搜索tnsnames ora 我的是在 W Tools Oracle setup app oracle product 11 2 0 server ne
  • 9.2 向量范数的三大不等式

    文章目录 柯西 施瓦茨不等式 赫尔德不等式 闵可夫斯基不等式 我这里要讲的三大不等式不是三种范数比较大小的三大不等式 而是非常经典的 学习线性代数必须掌握的三大不等式 柯西 施瓦茨不等式 赫尔德不等式和闵可夫斯基不等式 我先讲讲这三大不等式
  • 第三方jar包引入项目,发布到本地和远程仓库

    在开发过程中 往往会遇到对接其他公司的系统 然后对接公司会提供API对接方式 就是给一个jar包 我们只需要把jar包引入到项目中直接用即可 本地引用jar的话可以有两种方式 第一种就是本地包引用 如下将包放下工程下 然后maven指定 但
  • 关于Pytorch中的向量拼接

    torch cat A torch ones 2 4 print A B 2 torch ones 2 4 print B C torch cat A B 0 print C D torch cat A B 1 print D A的输出 t
  • 改变linux命令行中的颜色

    黑色背景 白色字体虽然是最经典的 但是有时候太多白花花的英文在一起也会变得乱 下面是我的改变字体的办法 目前我只实现了让root目录下的字体变为绿色 如下图 这个只是最简单的改变颜色的 虽然对大牛们来说很简单 但对我这个初学者来说 真是费了
  • 144项ppt制作技术

    1 两幅图片同时动作 PowerPoint的动画效果比较多 但图片只能一幅一幅地动作 如果你有两幅图片要一左一右或一上一下地向中间同时动作 可就麻烦了 其实办法还是有的 先安置好两幅图片的位置 选中它们 将之组合起来 成为 一张图片 接下来
  • 用Python建立可进可退的多级菜单系统

    coding utf 8 功能 可进可退的多级菜单系统 作者 XxLyle 日期 2021 12 16 def add record print 添加记录功能模块尚待开发 def find record print 查询记录功能模块尚待开发
  • Photoshop cs6 如何让图层渐变透明

    点击图层面板下方的蒙板工具 再选择左侧工具栏的渐变填充 选择黑 白渐变色 在图层上拖动 1 点击面板下方蒙板工具 在需要处理的图层上添加蒙板 2 选择渐变工具 快捷键G 选择黑白渐变 然后按住shift拖动鼠标拉个渐变就出来了 3 另外可以
  • 小程序的父子之间的传值调用

    前言 我们在小程序中父子组件之间的传值方法 目录 父传子 properties 步骤 1 在父组件 index wxml里面给调用子组件的地方绑定一个字段map 2 在父组件 index js中定义字段map 并用this setData改