首页 > 编程语言 >小程序自定义组件 - 组件通信父传子

小程序自定义组件 - 组件通信父传子

时间:2023-04-09 19:23:46浏览次数:33  
标签:count cj name 自定义 index 父传子 组件 属性

页面组件化后, 随即就面临组件间的通信问题, 就组件间如何传递数据的问题.

在 vue 中, 总结下来就是父组件通过 prop 属性给子组件传简单的值, 通过 slot 给子组件传 dom 等复杂数据; 反之, 子组件可通过 $emit 向父组件发射事件, 然后在父组件中处理逻辑, 达到子传父的效果.

在小程序中也基本是一样的操作, 父子组件通信也就3种方式:

  • 父传子: 通过属性绑定, 父组件通过指定的属性仅能传递 json 相关的数据
  • 子传父: 通过事件绑定, 子组件可向父组件传递任何数据
  • 父组件获取子组件实例: 通过 this.selectComponent( ) 这基本就是 vue 中的 ref

因为之前学了 vue3, 现在来看小程序就相当于又复习了一遍基础, wx 改改就能用了, 极大降低了学习成本, 挺好的.

父传子-属性传值

以之前的 cj 组件为例, 父组件 index 页面通过 name 属性向 cj 组件传递字符串 "youge", 然后子组件显示出来.

第一步, 在父组件 index 页面的 js 中定义一个 name 数据, 并渲染在 index.wxml中.

// index.js
Page({
  data: {
    name: 'youge'
  }
})

第二步, 在 index.wxml 中进行渲染, 并将其通过 name 属性传递给子组件 cj

<!--/pages/index/index.wxml-->
<view>
  <view >父组件中, name 的值是: {{name}}</view>
  <cj name="{{name}}"></cj>
</view>

第三步, 在子组件 cj 的 js 中需要通过设置一个名为 name 的属性进行接收 (当然取其它名也行的).

// components/cj/cj.js
Component({

  properties: {
    name: {
      type: String,
      value: ''
    }
  }
  
})

第四步, 在子组件的 wxml 中对属性进行渲染出来.

<!--components/cj/cj.wxml-->

<view class="cj">
  <view>俺是子组件,</view>
  <view>子组件中, 从父组件传递过来的 name 值是: {{name}}</view>
</view>

最后渲染的结果, 就是 第二步的主逻辑呈现, 即父组件 index 向子组件 cj 传值啦, 结果如下:

父组件中, name 的值是: youge
俺是子组件,
子组件中, 从父组件传递过来的 name 值是: youge

子组件自定义操作

子组件接收到富组件的传值后, 可以进行各种骚操作的, 这里以 cj 子组件接收父组件 index 页面 传递过来的 count 数值, 点击实现自增的效果为例:

还是依照上面的步骤, 父组件 index 页面部分:

// index.js
Page({
  data: {
    name: 'youge',
    count: 1
  }
})

<!--/pages/index/index.wxml-->
<view>
  <view >父组件中, name 和 count 的值是: {{name}}, {{count}}</view>
  <cj name="{{name}}" count="{{count}}"></cj>
</view>

子组件 cj 部分:

// components/cj/cj.js
Component({

  properties: {
    name: {
      type: String,
      value: ''
    },
    count: {
      type: Number,
      value: 0
    }
  },

  methods: {
    addOne() {
      this.setData({
        count: this.properties.count + 1
      })
    }
  }

})
<!--components/cj/cj.wxml-->

<view class="cj">
  <view>俺是子组件,</view>
  <view>从父组件传递过来的 name, count 值是: {{name}}, {{count}}</view>
  <button bindtap="addOne">+1</button>
  <view>子组件最新的 count 值是: {{count}}</view>
</view>

可以看到在显示的时候, 通过点击 "+1" 的按钮, 子组件的值会跟着变, 而父组件并不会. 这不就是我们的父传子, 通过属性, 然后子组件拿到数据后是可读可写的. 需重点理解的是整个传值的逻辑和顺序. 这和 vue 的 prop 简直就是一模一样的. 父通过属性给子组件传递数据, 子组件通过 prop 接收, 然后再做一波逻辑处理, 最后做成渲染.

标签:count,cj,name,自定义,index,父传子,组件,属性
From: https://www.cnblogs.com/chenjieyouge/p/17300840.html

相关文章

  • 浏览器层面优化前端性能(1):Chrom组件与进程/线程模型分析
    现阶段的浏览器运行在一个单用户,多合作,多任务的操作系统中。一个糟糕的网页同样可以让一个现代的浏览器崩溃。其原因可能是一个插件出现bug,最终的结果是整个浏览器以及其他正在运行的标签被销毁。现代操作系统已经非常健壮了,它让应用程序在各自的进程中运行和不会影响到其他程序......
  • .NET 通过组件CLSID执行系统命令
    .NET通过Type.GetTypeFromCLSID获取组件的CLSID,CLSID是一个唯一标识符,用于标识组件,如果遇到某些拦截的场景,可以使用GetTypeFromCLSID替代GetTypeFromProgID,这样做的好处传递的组件的方式从名称转成唯一标识符,例如ShellBrowserWindowAPI的CLSID值为C08AFD90-F2A1-11D1-8455-0......
  • 3.自定义注解实现系统日志记载
    前言今天来分享一下我昨天的成果,昨天计划复现若依系统的系统日志记载功能,若依的系统日志记载的主要实现使用过自定义注解配合切面类来实现的,这里会把标注@Log的方法在用户调用完后,将方法的一部分信息记录在数据库的指定数据表中。因此我们需要java的spring开发四层结构:domain......
  • GitHub Actions:从使用action操作到自定义action操作
    (目录)1、使用action操作文档https://docs.github.com/zh/actions/quickstart.github/workflows/github-actions-demo.ymlname:GitHubActionsDemorun-name:${{github.actor}}istestingoutGitHubActions......
  • ant-design-vue日历面板 a-calendar 属性自定义设置
    通过自定义属性设置,实现一个周末与工作日的不同颜色设置效果图: 使用的属性:自定义头部设置headerRender自定义日期显示dateFullCellRender代码:<template><divclass="box"><h3>1.自定义头部;2.自定义日期显示,工作日显示,周末显示</h3><a-c......
  • 小程序自定义组件 - 数据方法与属性
    这块在组件中的定义和使用,同vue是大致相同的.在小程序组件中定义在.js的Component()中即可.data和methods小程序中,组件数据要定义在data中,而事件处理函数和自定义方法都定义在methods中.以一个页面点击+1的例子作为演示:(还是之前的cj组件)组件......
  • 自定义序列化器类
    @Serialization是一个自定义装饰器,通常用于序列化Python对象。使用@Serialization装饰器可以将一个类转换为可序列化的对象,这样就可以将其存储到文件或通过网络传输。下面是一个使用@Serialization装饰器的示例:importjsondefSerialization(cls):defserializ......
  • 小程序自定义组件 - 创建与引用
    简单理解组件即"页面的一部分".组件化开发也更多是为了代码复用,方便管理和提高开发效率.前端的组件化开发我想大抵也是借鉴后端开发思想吧.从前端的实现来看,以vue为例即通过扩展自定义HTML标签的的形式,让其局部拥有"单文件"的功能(包括了模板,样式,逻辑).然后组......
  • 记录-VueJs中如何使用Teleport组件
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助了解排序算法的优缺点和适用场景是非常重要的,因为在实际开发中,需要根据实际情况选择最合适的排序算法。不同的排序算法适用于不同的场景,有的算法适用于小规模的数据集,有的算法适用于大规模的数据集,有的算法适用于......
  • Jmeter参数化的方式-用户参数、用户自定义变量、CSV文件设置、函数助手
    一、jmeter的主要功能参数化:事先准备好数据,脚本执行时从准备好的数据中取值;可将脚本中的某些输入使用参数来代替,在脚本运行时指定参数的取值范围和规则;在脚本运行时,根据需要选取不同的参数值作为输入,该方式成为数据驱动测试(DataDrivernTest,DDT),参数的取值范围称为数据池(Data......