(四)小程序学习笔记——自定义组件

1、组件注册——usingComponents

(1)全局注册:在app.json文件中配置 usingComponents进行注册,注册后可以在任意页面使用。
(2)局部注册,在页面的json文件中配置suingComponents进行注册,注册后只能子啊当前页面使用。

 "usingComponents": {"custom-checkbox": "./components/custom-checkbox/custom-checkbox"}

2、properties——接收传递进来的属性,类似vue的props

接收:

  properties: {label: {//数据的类型只能是String、Array、Number、Boolean、Object//也可以为null,表示不限制类型type: String,value: ''}},

访问:

this.properties.label

修改:

this.setData({label:"在组件内部修改 Properties中的数据"
})

在JS中可以访问和获取properties中的数据,但是一般不建议修改,会造成数据流的混乱。

3、wxml 自定义组件插槽——slot(同vue 的插槽一样)

  • 默认插槽:
  • 具名插槽:
组件A
<view>
<slot name="slot-right">
</view>
组件B
<text slot="slot-right">具名插槽<text>

在自定义组件的js文件开启支持多slot:

Component({options: {multipleSlots: true},})

4、自定义组件的样式和注意事项

  1. 在自定义的wxss文件中,不允许使用标签选择器、ID 选择器、属性选择器。请使用class类选择器。
  2. 子选择器(.a>.b)只能用于view 和子组件,用于其他组件(标签)可能会导致样式失效。
  3. 继承样式,例如:color、font 等都会从组件外继承。
  4. (除继承样式外)全局样式、组件所在页面的样式文件中的样式都对自定义组件 无效。
  5. 官方不推荐做法: 不建议全局样式文件 、父级页面之间使用标签选择器设置样式。
  6. 组件和组件使用者如果使用了后代选择器(.a .b),可能会出现一些非预期情况

5、组件样式隔离——stylelsolation

stylelsolation:用于配置样式隔离选项。主要有三个属性值

  • isolated :表示样式隔离,在自定义组件内外,使用了相同class属性的样式不会相互影响。默认值。
  • apply-shared:组件的使用者、页面的wxss样式可以影响自定义组件中的样式,但是自定义组件不会影响到外部组件使用者、页面的wxss设置的样式。
  • shared:组件的使用者、页面的wxss和自定义组件中的样式可以相互影响,甚至还可以影响到其他使用了 “apply-shared”、"shared"属性的自定义组件。

配置:在自定义组件的js文件中

Component({options: {// styleIsolation: 'isolated'// styleIsolation: 'apply-shared'styleIsolation: 'shared'},})

**注意:**自定义组件中不可以直接修改默认组件的样式,比如修改复选框的样式。如果想要修改需要 stylelsolation:“shared”;但是shared属性还会修改其他页面的样式、组件使用者的样式、以及其他使用了“apply-shared”\“shared”属性的自定义组件的样式。此时可以给可以使想要受影响的组件单独添加一个命名空间(类名)

6、自定义组件的数据监听器——observers(类似于vue->watch)

  //用于监听数据属性是否发生了变化observers:{//key:需要监听的数据//value:就是一个回调函数,形参:最新的数据num: function (newNum) {},//同时监听多个数据使用字符串,用逗号分隔"num,count": function (newNun, NewCount) {},//支持监听属性,以及内部数据的变化,使用数据路径"obj.name": function (newName) {},"arr[1]": function (newItem) {console.log(newItem)},//监听所有属性的变化使用通配符:**"obj.**": function (newObj) {console.log(newObj)}}

7、组件通信——父子组件传值

  • 父组件往子组件传值
    (1)父组件wxml中使用数据绑定方式向子组件传递动态数据。
    (2)子组件通过properties接收父组件传递的数据。(如果需要将properties中的数据赋值给data中的数据,通过observers实现)
  • 子组件向父组件传值
    (1)自定义组件内部使用triggerEvent方法发射一个自定义事件,同时可以携带数据。(类似于 $emit)

this.triggerEvent('myevent',this.data.num)
(2)在父组件的自定义组件标签上通过ind方法监听发射的事件,同时绑定事件的处理函数,在事件的处理函数中通过对象获取到传递的数据。
<custom bind:myevent='getData'></custom>getData(event){
//event。detail 获取子组件传递给父组件的数据
console.log(event) 
}

8、获取组件实例——selectComponent

this.selectComponent

  //获取子组件对象,参数为class选择器或者id选择器。const res = this.selectComponent(".child");console.log(res.data.num)

9、自定义组件的生命周期

10、自定义组件所在页面的生命周期

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

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

相关文章

对于button按钮引发的bug

主要原因就是今天在给button按钮添加一个点击事件的时候&#xff0c;并没有声明button的type类型&#xff0c;就一直发生点击按钮但事件并不触发的问题。 触发这种问题的原因就是: 按钮默认的 type 类型是 "submit"&#xff0c;而不是 "button"。当你不显式…

C语言基础—多线程基础

C语言基础—多线程基础 简介正文 简介 多线程是一种并发编程技术&#xff0c;允许程序同时执行多个任务。在C语言中&#xff0c;我们可以使用POSIX线程库&#xff08;pthread&#xff09;来实现多线程编程。 正文 在C语言中&#xff0c;创建线程的基本步骤如下&#xff1a; …

【前端】VUE项目创建

在所需文件夹中打开cmd命令行窗口&#xff0c;输入vue ui 进入web可视化界面选择创建新项目 根据需求依次完成下列选择&#xff0c;下列是参考配置&#xff0c;完成后点击创建项目即可 最终显示完成

(学习日记)2024.05.10:UCOSIII第六十四节:常用的结构体(os.h文件)第三部分

之前的章节都是针对某个或某些知识点进行的专项讲解&#xff0c;重点在功能和代码解释。 回到最初开始学μC/OS-III系统时&#xff0c;当时就定下了一个目标&#xff0c;不仅要读懂&#xff0c;还要读透&#xff0c;改造成更适合中国宝宝体质的使用方式。在学完野火的教程后&a…

搭建git私人仓库

环境准备&#xff1a; 服务端&#xff1a;centos7 客户端&#xff1a;win11 1、安装git sudo apt-get install git2、创建git用户 adduser git修改密码 passwd git查看是否添加成功 cd /home && ls -al3、导入公钥 # 1.切换到git账号 su git# 2.进入 git账户的主…

python virtualenv 创建虚拟环境指定python版本,pip 从指定地址下载某个包

一、安装 pip install virtualenv是python3 的话 换成 pip3 如果下载过慢可以从国内链接下载 如下从阿里云下载 pip3 install -i https://mirrors.aliyun.com/pypi/simple virtualenv二、创建指定python版本的虚拟环境 virtualenv venv --pythonpython3.12这里的venv 为创…

从OpenJDK源码看JAVA虚拟机的创建过程

这里写目录标题 关于Java跨平台能力的理解Java Virtual Machine是怎么创建的。1. Java Launcher2. JLI_Launch 入口3. JVM-Init4. 开启新线程并继续5. 调用JavaMain6. 初始化Java虚拟机&#xff0c;并执行Main方法java.c中的InitializeJVM 方法 7. JNI_CreateJavaVM8. 虚拟机创…

WPS的JS宏如何设置Word文档的表格的单元格文字重新编号

希望对Word文档中的表格进行统一处理&#xff0c;表格内的编号&#xff0c;有时候会出现紊乱&#xff0c;下一个表格的编号承接了上一个表格的编号&#xff0c;实际需要重新编号。 当表格比较多时&#xff0c;手动更改非常麻烦&#xff0c;而且更改一遍并不能完成&#xff0c;…

使用 XHbuilder 编辑器 uniapp开发 app 中使用手机本相机可直接拍摄照片进行上传,也可以选择相册进行上传

学习目标&#xff1a; 使用 XHbuilder 编辑器 uniapp开发 app 中使用手机本相机可直接拍摄照片进行上传&#xff0c;也可以选择相册进行上传 学习内容&#xff1a; 相关内容 上传图片上传时调用的相关方法配置的相关模块需要配置的相关权限 知识小结&#xff1a; 总结&#…

最大连续1的个数 ||| ---- 滑动窗口

题目链接 题目: 分析: 题目中说可以将最多k个0翻转成1, 如果我们真的这样算就会十分麻烦, 所以我们可以换一种思路: 找到一个最长的子数组, 最多有k个0解法一: 暴力解法: 找到所有的最多有k个0的子字符串, 返回最长的解法二: 找到最长的子数组, 我们可以想到"滑动窗口算…

【win10相关】更新后出现未连接到互联网的问题及解决

问题背景 在win10更新完系统之后&#xff0c;第二天电脑开机后&#xff0c;发现无法上网&#xff0c;尝试打开百度&#xff0c;但是出现以下图片&#xff1a; 经过检查&#xff0c;发现手机是可以上网的&#xff0c;说明网络本身并没有问题&#xff0c;对防火墙进行了一些设置…

C++/BOOST filesystem fs::directory_iterator一个滑稽的错误

错误来源于&#xff0c;用 fs::directory_iterator iter(folderPath), end; 然后for循环 for (; iter ! iter_end; iter) {} 最开始没问题&#xff0c;后来说加个进度条&#xff0c;统计一下所有文件数量&#xff0c;用了std::distance&#xff0c; int totalFiles std::…

XYCTF2024 部分w

RE 1. 聪明的信使 基础爆破 #include<stdio.h> #include<string.h> int main() {char enc[] "oujp{H0d_TwXf_Lahyc0_14_e3ah_Rvy0acwc!}";char flag[41] {0};int i, j;for (i 0; i < strlen(enc); i){for (j 33; j < 127; j){if ((j < 9…

Skill Check: Fundamentals of Large Language Models

Skill Check: Fundamentals of Large Language Models 完结&#xff01;

Vue项目中引入高德地图步骤详解,附示例代码

vue中如何使用高德地图&#xff0c;下面为您详解。 步骤一&#xff1a;安装高德地图的JavaScript API 在Vue项目的根目录下打开终端&#xff0c;执行以下命令安装高德地图的JavaScript API&#xff1a; npm install amap/amap-jsapi-loader --save 步骤二&#xff1a;创建地…

什么?你还不懂文件系统和软硬链接?

文章目录 序言认识磁盘磁盘在系统中的管理熟悉磁盘各个分区 软硬链接软链接硬链接 序言 首先熟悉一下一些专有名词(了解即可,但必须有一个概念认识) 固态:SSD,笔记本中常装的,台式机中也可以装,常见的对应接口M.2和SATA接口 磁盘:90年代常用的数据存储设备,或是现在企业级数据…

IPv4 NAT(含Cisco配置)

IPv4 NAT&#xff08;含Cisco配置&#xff09; IPv4私有空间地址 类RFC 1918 内部地址范围前缀A10.0.0.0 - 10.255.255.25510.0.0.0/8B172.16.0.0 - 172.31.255.255172.16.0.0/12C192.168.0.0 - 192.168.255.255192.168.0.0/16 这些私有地址可在企业或站点内使用&#xff0c…

学习Python的第三天

学习Python的第三天&#xff0c;我开始深入Python的基本语法和特性&#xff0c;并通过编写一些简单的代码来加深理解。以下是我今天学习的一些代码案例&#xff1a; 1. 函数定义与调用 # 定义一个函数&#xff0c;计算两个数的和 def add_numbers(a, b):return a b# 调用函数…

从零开始的软件测试学习之旅(四)web项目工作流程介绍

WEB手工项目 项目介绍项目技术分析项目学习准备工作如何快速熟悉项目举例熟悉TPshop项目 总体系统项目介绍项目与数据库测试流程什么是软件需求需求评审 测试计划测试方案测试计划和测试方案的区别 项目介绍 满足经典三层架构:前端 后端 数据库 前端:运行在用户端的浏览器和客…

同仁堂医养拟赴港上市,养老产业的盈利难题有了答案?

提及银发经济&#xff0c;大众可能最先想到的就是养老产业&#xff0c;在市场需求推动下&#xff0c;这一细分赛道的增长已势不可挡。单从入局者的积极性就可以把握到赛道前景之广阔。 天眼查专业版数据显示&#xff0c;截至目前&#xff0c;我国拥有养老相关企业36.2万家&…