• 微信小程序父子组件之间传值


    父子组件之间传值

    组件之间传值有两种,一种是父向子传值,另外一种是子向父传值

    先说一下大致的区别吧…

    区别:

    1. 父向子传值使用的是属性绑定,子组件中 的 properties 对象 进行接收父组件传递过来的值
    2. 子向父传值使用的是自定义事件,父组件通过自定义事件中的 事件对象e 来接收子组件传递过来的值

    父向子传值

    首先我们在我们的小程序中创建一个 components 文件夹 用来存放我们的子组件。创建以后我们就可以在 components 文件夹下创建我们的子组件 child , 当然创建成任何名字都可以,我在这里创建成 child ,如下图:
    在这里插入图片描述
    创建好以后就是引入了,把这个子组件 child 引入到我们的 父组件 index 首页中去。 这里说明一下,我在这里一共就创建了两个页面,一个是 pages 节点下的 index 路由页面,以及 components 节点下的 child 组件。

    那么我们怎么引入呢?(原则在父组件的 json 文件中的 usingComponents节点下 引入)如下:

    {
      "usingComponents": {
        "child":"../../components/child/child"
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    引入以后怎么把子组件的内容渲染到父组件上呢?… :

    也很简单:上面我们引入的时候,看上面代码:给组件起的自定义名字是 child 那么 我们渲染的时候就 在 index 父组件 里写上一组 <child><child> 标签即可,就可以把子组件渲染到 父组件中…

    此时我们父子页面都有了,那么就可以进行传值了…

    我们在父组件的数据data 中定义两个数据,name:'张三', age:23, 把这个数据传递给 子组件 child

    在这里我们分三个步骤:

    1.在 child 标签中 使用属性绑定的方式 把父组件的值绑定一下 <child name="{{ name }}" age="{{ age }}" ></child>,此时父组件的操作已经ok了,接下来看子组件的操作…
    2.在子组件的 js 文件的 properties 对象中接收父组件传递过来的值

      // 接受父组件传递过来的值
      properties: {
        name:{
          type:String,
          value:'我是默认值:苹果'
        },
        age:{
          type:Number,
          value:'我是默认值: 100'
        }
      },
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    3.此时子组件 child 已经接收到了 父组件传递过来的值 ,我们可以在 子组件的 wxml 页面中 引用一下这个值看看是否传递成功了

    <!-- 父向子传值 -->
    <view>
      这是父组件传递过来的值 name: {{ name }}-----age {{age}}
    </view>
    
    • 1
    • 2
    • 3
    • 4

    index 父页面 显示的结果如下:

    在这里插入图片描述

    显然传递成功… >^<

    接下来说说子向父传值

    子向父传值

    我们先在子组件的data 数据中 定义一个数据 msg

      data: {
        msg:'我是子组件的值'
      },
    
    • 1
    • 2
    • 3

    接下来就开始传值,传值时间上来分有两种,
    第一种在组建的生命周期中,也就是页面一加载就把组件中的值传过去
    第二种通过事件绑定的方式传值

    先说第二种:(时间绑定的方式):

    1.在子组件wxml 中放一个按钮,并给他绑定一个事件 send

    <!-- 点击按钮向父组件传值 -->
    <button bindtap="send">点击按钮向父组件传值</button>
    
    • 1
    • 2

    2.在child.js中定义一下这个send ,并写入一下传值的代码:

     methods: {
        send(){
          this.triggerEvent('send',this.data.msg)
        }
      },
    
    • 1
    • 2
    • 3
    • 4
    • 5

    传值使用的是 :this.triggerEvent() ,上面代码中 send 就是传递给父组件的自定义事件名称,接下来就在父组件中定义一下这个自定义事件bindsend="send"

    <child  name="{{ name }}" age="{{ age }}" bindsend="send"></child>
    
    • 1

    定义好以后,在 父组件的 js 文件中,定义一下send ,并且给send 方法 ,传递一个 事件对象 e

     // 父组件接受子组件传递过来的值
      send(e){
        console.log(e.detail);
      },
    
    • 1
    • 2
    • 3
    • 4

    子组件传递过来的值就存放在 e.detail 中…

    在这里插入图片描述

  • 相关阅读:
    二维树状数组
    轻量容器引擎Docker安装及其架构
    如何在图片上添加水印?快把这些方法收好
    2021年9月电子学会图形化四级编程题解析含答案:小猫钓鱼
    Vue04/Vue样式处理 动态操作 class 动态操作 style
    信号与线性系统分析(吴大正,郭宝龙)(3-单位脉冲/阶跃序列以及4-信号的运算)
    【C++】【自用】STL六大组件:算法
    19 Java 转换流&& 对象操作流 && Properties集合
    Redis常见命令
    基于STC12C5A60S2系列1T 8051单片机的模数芯片ADC0832实现模数转换应用
  • 原文地址:https://blog.csdn.net/egg_er/article/details/125422491