微信小程序——自定义组件(纯数据字段),组件的生命周期,组件所在页面的生命周期,插槽,父子组件之间的通信,事件绑定,属性绑定,behavior

news2024/9/20 17:33:04

一.纯数据字段

1.什么是纯数据字段

概念:纯数据字段指的是那些不用于界面渲染的data字段。

应用场景:例如有些情况下,某些 data 中的字段既不会展示在界面上,也不会传递给其他组件,仅仅在当前组件内部使用。带有这种特性的 data 字段适合被设置为纯数据字段。

好处:纯数据字段有助于提升页面更新的性能。

<view style="background-color: rgb({{fullColor}});" class="colorBox">颜色值:{{fullColor}}</view>
<button  type="default" bindtap="changeR">R</button>
<button  type="primary" bindtap="changeG">G</button>
<button  type="warn" bindtap="changeB">B</button>
<!-- <view>{{rgb.r}} , {{rgb.g}} {{rgb.b}}</view> -->

此处的rgb在页面中就是纯数据字段

2.使用规则

在 Component 构造器的 options 节点中,指定 pureDataPattern 为一个正则表达式,字段名符合这个正则表达式的字段将成为纯数据字段,示例代码如下:

3.使用纯数据字段改造数据监听器案例

当面对多个rgb需要改写,通过选中rgb.按住CTRL+d即可快速选中,再按左键将光标移动到字母r前即可完成全部改造。

二.组件的生命周期

1.组件全部的生命周期函数

小程序组件可用的全部生命周期如下表所示:

2.组件主要的生命周期函数

在小程序组件中,最重要的生命周期函数有3个,分别是 created 、 attached 、 detached 。它们各自的特点如下:

①组件实例刚被创建好的时候, created 生命周期函数会被触发

.此时还不能调用 setData

.通常在这个生命周期函数中,只应该用于给组件的 this 添加一些自定义的属性字段

②在组件完全初始化完毕、进入页面节点树后, attached 生命周期函数会被触发

.此时, this . data 已被初始化完毕

.这个生命周期很有用,绝大多数初始化的工作可以在这个时机进行(例如发请求获取初始数据)

③在组件离开页面节点树后, detached 生命周期函数会被触发

.退出一个页面时,会触发页面内每个自定义组件的 detached 生命周期函数

.此时适合做一些清理性质的工作

3.lifetimes节点

在小程序组件中,生命周期函数可以直接定义在 Component 构造器的第一级参数中,可以在 lifetimes 字段内进行声明(这是推荐的方式,其优先级最高)。示例代码如下:

新版书写方法:

当旧版新版同时出现的时候,只会展示新版的结果。

三.组件所在页面的生命周期

1.什么是组件所在页面的生命周期

有时,自定义组件的行为依赖于页面状态的变化,此时就需要用到组件所在页面的生命周期。

例如:每当触发页面的 show 生命周期函数的时候,我们希望能够重新生成一个随机的 RGB 颜色值。在自定义组件中,组件所在页面的生命周期函数有如下3个,分别是:

2. pageLifetimes 节点

组件所在页面的生命周期函数,需要定义在 pageLifetimes 节点中,示例代码如下:

在组件.js文件中:

3.生成随机的RGB颜色值

在test.js的method方法中随机生成一个颜色值

_randomColor(){
      this.setData({
        _rgb: {
          r:Math.floor(Math.random() *256),
          g:Math.floor(Math.random() *256),
          b:Math.floor(Math.random() *256)
        }
      })
    }

在pagelifetimes节点的show调用方法:

即可实现。

四.插槽

1.什么是插槽

在自定义组件的 wxml 结构中,可以提供一个< slot >节点(插槽),用于承载组件使用者提供的 wxml 结构。

2.单个插槽

在小程序中,默认每个自定义组件中只允许使用一个< slot >进行占位,这种个数上的限制叫做单个插槽。

实例如下:

在页面中添加一个view

此时在页面的view是slot填充的内容。

3.启用多个插槽

在小程序的自定义组件中,需要使用多< slot >插槽时,可以在组件的 js 文件中,通过如下方式进行启用。示例代码如下:

4.定义多个插槽

可以在组件的.wxml中使用多个<slot>标签,以不同的name来区分不同的插槽,示例代码如下:

实例如下:

在组件test4.wxml内定义多个slot ,

在页面.wxml中进行声明:

此时在页面的显示效果如图:

五.父子组件之间的通信

1.父子组件之间通信的3种方式

👉属性绑定

.用于父组件向子组件的指定属性设置数据,仅能设置 JSON 兼容的数据

只能传递普通类型的数据,无法传递方法

👉事件绑定

.用于子组件向父组件传递数据,可以传递任意数据

👉获取组件实例

.父组件还可以通过 this . selectComponent ()获取子组件实例对象

.这样就可以直接访问子组件的任意数据和方法

2.属性绑定

实现父向子传值,而且只能传递普通类型的数据,无法将方法传递给子组件,父组件的示例代码如下:

子组件在properies节点中声明对应的属性并使用,示例代码如下:

效果如下图:

3.事件绑定

事件绑定用于实现子向父传值,可以传递任何类型的数据。使用步骤如下:

👉父组件的 js 中,定义一个函数,这个函数即将通过自定义事件的形式,传递给子组件:

在父组件中定义syncCount方法

将来,这个方法会被传递给子组件,供子组件进行调用

👉父组件的 wxml 中,通过自定义事件的形式,将步骤1中定义的函数引用,传递给子组件:

方式一:使用bind:自定义事件名称(推荐:结构清晰)

<my-test5 count="{{count}}" bind:sync="syncCount"></my-test5>

方式二:或在 bind 后面直接写上自定义事件名称

<my-test5 count="{{count}}" bindsync="syncCount"></my-test5>

👉子组件的 js 中,通过调用 this . triggerEvent ('自定义事件名称' , [*参数对象*/]),将数据发送到父组件

👉父组件的 js 中,通过 e . detail 获取到子组件传递过来的数据

效果如下图:点击后二者都可同步

4.获取组件实例

可在父组件里调用 this . selectComponent (" id 或 class 选择器"),获取子组件的实例对象,从而直接访问子组件的任意数据和方法。调用时需要传入一个选择器,例如 this . selectComponent (". my - component ")。

六.behavior

1.什么是behaviors

behaviors 是小程序中,用于实现组件间代码共享的特性,类似于 Vue . js 中的" mixins "。

2. behaviors 的工作方式

每个 behavior 可以包含一组属性、数据、生命周期函数和方法。组件引用它时,它的属性、数据和方法会被合并到组件中。

每个组件可以引用多个 behavior , behavior 也可以引用其它 behavior 。

3.创建 behavior

调用 Behavior ( Object object )方法即可创建一个共享的 behavior 实例对象,供所有的组件使用:

实力效果图如下:

4.导入并使用 behavior

在组件中,使用 require ()方法导入需要的 behavior ,挂载后即可访问 behavior 中的数据或方法,示例代码如下:

实例如下:

界面渲染图为:

5.behavior中所有可用的节点

6.同名字段的覆盖和组合规则*

组件和它引用的 behavior 中可以包含同名的字段,此时可以参考如下3种同名时的处理规则:

①同名的数据字段( data )

②同名的属性( properties )或方法( methods )

③同名的生命周期函数

关于详细的覆盖和组合规则,大家可以参考微信小程序官方文档给出的说明:

https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/behavio

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/197066.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《Keras深度学习:入门、实战与进阶》之回归问题实例:波士顿房价预测

本文摘自《Keras深度学习&#xff1a;入门、实战与进阶》。 本节将要预测20世纪70年代中期波士顿郊区房屋价格的中位数。这个数据是1978年统计收集的&#xff0c;数据集中的每一行数据都是对波士顿周边或城镇房价的描述&#xff0c;包含以下14个特征和506条数据。  CRIM&am…

verilog图像算法实现和仿真(代码与实践)

【声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 这里的代码指的是verilog代码,而不是之前的python代码。因为verilog处理的是数据,所以之前我们也谈到过,如果需要用verilog处理图像数据,需要先用python把图像变成文本文件,等到…

菜鸟的进阶--手写一个微型Spring

前言想干嘛深入了解spring原理&#xff0c;特别是IOC容器是如何实现的&#xff1f;AOP是如何实现的&#xff1f;手写一个spring迷你版框架&#xff0c;实现容器和AOP机制。我为什么想这么做spring是整个java体系中最重要的框架&#xff0c;它整合第三方技术&#xff0c;将所有的…

交联剂134272-64-3,Maleimide-NH2 HCl,2-马来酰亚胺乙胺盐酸盐

【中文名称】N-(2-氨乙基)马来酰亚胺盐酸盐&#xff0c;2-马来酰亚胺乙胺盐酸盐【英文名称】 MAL-NH2 HCl&#xff0c;Maleimide-NH2 HCl&#xff0c;MAL NH2 HCl&#xff0c;Maleimide-amine HCl&#xff0c;MAL-amine HCl&#xff0c;N-(2-AMinoethyl)MaleiMide Hydrochlorid…

5年老测试员,面试被刷,别人说他不懂自动化测试.....

圈内认识的朋友最近跳槽了&#xff0c;之前在一家小公司干了5年测试&#xff0c;本来以为很容易跳一个高待遇的工作&#xff0c;结果却比想象的难&#xff0c;因为他不会自动化测试… 最近也看了很多人的简历&#xff0c;写的都是3年工作经验&#xff0c;但面试中&#xff0c…

对数据库几个范式的理解

数据库关系理论 这部分主要是几个概念很抽象&#xff0c;大家开始学可能学不明白。最近在准备复试&#xff0c;复习了一下相关的内容&#xff0c;顺便做一下总结。 先说几个名词&#xff1a; 候选码&#xff1a;能够唯一确定一个元组的属性集合称为候选码。注意是集合&#…

每日学术速递2.3

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.Cv、cs.LG 1.Compositional Prompt Tuning with Motion Cues for Open-vocabulary Video Relation Detection(ICLR 2023) 标题&#xff1a;通过基于错误的隐性神经表征的上下文修剪实现高…

Java基础学习笔记(十五)—— 集合(3)

集合1 HashMap 类1.1 HashMap 类概述1.2 HashMap 案例2 TreeMap 类2.1 TreeMap 类概述2.2 TreeMap 案例3 Properties集合3.1 Properties集合概述3.2 Properties基本使用3.3 Properties特有方法3.4 Properties和IO流相结合的方法4 可变参数与不可变集合4.1 可变参数4.2 不可变集…

2023.1.26

0、任务 今明两天任务&#xff0c;回答以下问题&#xff1a; 1、网络传输延迟有哪些&#xff1f;如何区分传输延迟和排队延迟&#xff1f; 2、如何理解路由器存储转发的过程&#xff1f; 3、拥塞是什么&#xff0c;为什么会发生拥塞&#xff0c;发生拥塞的表现是什么&#xff…

网络资源下载方式:http/https、ftp/sftp、BT种子、磁力下载、ed2k下载等的区别

文章目录参考资料序言中心化下载http/https下载ftp/sftp下载http与ftp下载方式的不同中心化下载的缺点中心化下载BT种子下载磁力下载ed2k下载推荐的下载器IDM下载器安装步骤IDM如何下载种子文件参考资料 一文读懂Bt种子、磁力链接、直链、p2p这些下载的区别 常说的BT下载、磁力…

【数据结构基础】图 - 基础和Overview

图(Graph)是由顶点和连接顶点的边构成的离散结构。在计算机科学中&#xff0c;图是最灵活的数据结构之一&#xff0c;很多问题都可以使用图模型进行建模求解。例如: 生态环境中不同物种的相互竞争、人与人之间的社交与关系网络、化学上用图区分结构不同但分子式相同的同分异构体…

情人节该送女友什么?分享四款适合送女生的数码好物

情人节快到了&#xff0c;对于有伴侣的人来说&#xff0c;这是一个浪漫的日子。在这个浪漫的日子&#xff0c;一些生活仪式感是必不可少的。最近看到不少人问&#xff0c;适合女生的数码好物有哪些&#xff1f;下面&#xff0c;我来给大家推荐几款适合送女生的数码好物&#xf…

动态规划DP与记忆化搜索DFS 题单刷题(c++实现+AC代码)

文章目录数字三角形滑雪挖地雷最大食物链计数采药疯狂的采药5倍经验值过河卒洛谷动态规划入门题单&#xff1a; 提单传送门 数字三角形 观察下面的数字金字塔。写一个程序来查找从最高点到底部任意处结束的路径&#xff0c;使路径经过数字的和最大。每一步可以走到左下方的点也…

“深度学习”学习日记。卷积神经网络--卷积层

2023.2.3 CNN中出现一些新的概念&#xff1a;填充、步幅 等&#xff0c;此外各层中传递的数据是有形状的&#xff0c;与之前的全连接层神经网络完全不同&#xff1b; 一、全连接层存在的问题&#xff1a; 全连接层神经网络使用了Affine层&#xff0c;在相邻的神经元全部连接…

php7.3.4 pdo方式连接sqlserver 设置方法

我这边用的php是7.3.4版本的&#xff0c;大家设置的时候看一下。一、首先要开启php的sqlsrv扩展1.下载SQLSRV58.EXE,我的php版本是7.3.4https://docs.microsoft.com/en-us/sql/connect/php/release-notes-php-sql-driver?viewsql-server-2017#previous-releases拷贝到浏览器打…

内网渗透(二)之基础知识-工作组介绍

系列文章 内网渗透(一)之基础知识-内网渗透介绍和概述 注&#xff1a;阅读本编文章前&#xff0c;请先阅读系列文章&#xff0c;以免造成看不懂的情况&#xff01;&#xff01; 工作组介绍 1、工作组的介绍 在一个大型单位里,可能有成百上千台计算机互相连接组成局域网,它…

Rancher 部署 MongoDB

文章目录前置部署创建 Headless开始部署测试前置 背景&#xff1a;在 K8S 集群用 bitnami 部署 MongoDB 有一定的学习成本&#xff0c;有兴趣可以参考 k8s 部署 mongodb 三种模式&#xff0c;且部署后发现 MongoDB 会随着时间推移占用越来越多的内存&#xff0c;暂没找到原有&…

计算机如何在本地硬盘安装WinPE系统

环境&#xff1a; 联想E14 Win 10专业版 U盘魔术师V6 30G硬盘分区 双硬盘&#xff1a;128G固&#xff0b;1T机 DiskGenius UltraISO 问题描述&#xff1a; 如何在本地硬盘安装WinPE系统 解决方案&#xff1a; 一、使用软件制作硬盘PE系统 1.机械磁盘先分区分一个30G分区 …

Java 中的Type类型及其实现【学习记录】

概述 在JDK1.5之前只有原始类型&#xff0c;此时所有的原始类型都通过字节码文件类Class进行抽象。Class类的一个具体对象就代表一个指定的原始类型。 JDK1.5加入了泛型类&#xff0c;扩充了数据类型&#xff0c;从只有原始类型基础上扩充了参数化类型、类型变量类型、通配符…

OpenStack使用Skyline Dashboard面板替换默认Horizon面板

书接上回 OpenStack Yoga安装使用kolla-ansible 忘记提示了。如果截止发稿今天&#xff0c;使用最新zed版本&#xff0c;在最后一步部署阶段会报错&#xff0c;好像是rabbitMQ重启失败。所以建议使用最新版再退一个版本 官方文档 skyline-apiserver/README-zh_CN.md at maste…