1.组件wxml的slot-插槽
  • 在使用基础组件时,可以在组件中间写子节点,从而将子节点内容展示到页面中,自定义组件也可以接收子节点
  • 但是要在组件模板中定义节点,承载组件中间的子节点
  • 需要使用多个插槽时,要在组件.js中声明启用,同时给slot添加name属性来区分不同的slot(具名插槽)
  • 然后给子节点内容添加slot属性,属性值是对应的slot的name名称,来将内容插入对应的slot中。

label和slot中的内容可以二选一

.js中的代码

Component({option: {multipleSlot: true},
}

页面page

<custom01><text slot="slot-top">我要显示到顶部</text>我是子节点内容<text slot="slot-bottom">我要显示到底部</text>
</custom01>

components组件

<view><slot name="slot-top" /><!-- slot就是用来接收、承接子节点的内容 --><!-- slot只是一个占位符,子节点内容会将slot进行替换 --><view><slot /></view><slot name="slot-bottom" />
</view>
2.组件样式及注意事项

自定义组件拥有自己的 wxss 样式,组件 wxss 文件的样式,默认只对当前组件生效

编写组件样式时,需要注意以下几点:

  1. app.wxss 或页面的 wxss 中使用了标签名(view)选择器(或一些其他特殊选择器)来直接指定样式
    这些选择器会影响到页面和全部组件,通常情况下这是不推荐的做法
  2. 在自定义的wxss文件中,不允许使用标签、ID、属性选择器,只能用class选择器
  3. 组件和引用组件的页面中使用后代选择器(.a .b)在一些极端情况下会有非预期的表现,如遇,请避免使用
  4. 子元素选择器(.a>.b)只能用于 view 组件与其子节点之间,用于其他组件可能导致非预期的情况。
  5. 继承样式,如 font 、 color ,会从组件外继承到组件内。
  6. 除继承样式外, 全局中的样式、组件所在页面的的样式对自定义组件无效 (除非更改组件样式隔离选项)
3.组件样式隔离

自定义组件的样式只受自身 wxss 的影响,但是有时候我们需要组件使用者的样式能够影响到组件,这时候就需要指定特殊的样式隔离选项 styleIsolation。

有以下取值:

  1. isolated:表示启用样式隔离,在自定义组件内外,使用 class 指定的样式将不会相互影响(一般情况下的默认值)
  2. apply-shared:表示页面 wxss 样式将影响到自定义组件,但自定义组件 wxss 中指定的样式不会影响页面
  3. shared:表示页面 wxss 样式将影响到自定义组件,自定义组件 wxss 中指定的样式也会影响页面和其他设置了 apply-shared 或 shared 的自定义组件。
options: {// isolated开启样式隔离,是默认值//apply-shared组件使用者样式能够影响到自定义组件本身,反之不行// shared表示组件使用者、页面的wxss样式能够影响到自定义组件,反之也可以styleIsolation: "shared"},

4.小程序修改checkbox样式

在这里插入图片描述

5.数据监听器-observers

数据监听器主要用于监听和响应任何属性(properties)和数据(data)的变化,数据变化时 就会发生回调函数,方便开发者进行业务逻辑处理。
数据监听需要使用-observers字段

Component({/*** 组件的属性列表*/properties: {label: {type: String,value: "测试"}},/*** 组件的初始数据*/data: {num:10,count: 100,obj: { name: 'tom', age: 10 },arr: [1, 2, 3]},// 用来监听数据以及属性是否发生了变化observers: {// key:需要监听的数据// value:回调函数,形参:最新的数据num: function(newNum) {// 对data中数据进行监听,如果数据没有发生,监听器不会执行console.log(newNum)},// 同时监听多个数据'num, count': function(newNum, newCount) {console.log(newNum, newCount);},// 支持监听属性以及内部数据的变化"obj.name": function(newName) {console.log(newName);},"arr[1]": function(newArr) {console.log(newArr);},// 监听对象中所有属性变化// 用通配符"obj.**": function(newObj) {console.log(newObj);},// 与data中不同,只要组件使用者传递了数据,监听器中就能获取数据"label": function(newLabel) {console.log(newLabel);}},/*** 组件的方法列表*/methods: {// 更新数据updateData () {this.setData({num: this.data.num + 1,count: this.data.count - 1,'obj.name': 'jerry','arr[1]': 666,'label': "最新的标题"})}}
})
6.组件通信-父组件传值
  1. 在父组件WXML中使用数据绑定的方式向子组件传递动态数据
  2. 子组件内部使用properties接收父组件传递的数据即可
observers: {// 如过需要properties中的数据赋值给data// 可以使用 observers进行处理checked: function(newChecked) {this.setData({isChecked: newChecked})}}
7.组件通信-子往父传值
  1. 自定义组件内部使用triggerEvent方法发射一个自定义的事件,同时可以携带数据
  2. 自定义组件标签通过bind方法监听发射的事件,同时绑定事件处理函数,在事件处理函数中通过事件对象获取传递的数据
 methods: {// 将数据传递给子组件sentData () {// 如果需要将数据传递给父组件// 需要用triggerEvent发射自定义事件this.triggerEvent('myevent', this.data.num)}}<!-- 需要在自定义组件标签上通过bind方法绑定自定义事件,同时绑定事件处理函数 -->
<view>{{ num }}</view>
<custom05 bind:myevent="getData" />data: {num : ''},getData (event) {console.log(event);// 可以通过事件对象.detail获取子组件传递给父组件的数据this.setData({num: event.detail})},<button plain type="primary" bindtap="sentData">传递数据</button>
8.获取组件实例

父组件通过this.selectComponent方法,获取子组件实例对象,这样就可以访问子组件的任意数据和方法
this.selectComponent方法在调用时需要传入一个匹配选择器selector

getChild () {const res = this.selectComponent('.child')console.log(res);}
9.组件生命周期
  • 组件生命周期:指组件自身的一些钩子函数,函数在特定的时间节点被触发
  • 函数要在lifetimes字段内进行声明
  • 有5个:created, attached, ready, moved, detached

在这里插入图片描述

Component({lifetimes: {// 组件实例被创建好以后执行// 在组件实例刚刚被创建时执行,注意此时不能调用 setDatacreated () {}, // 组件被初始化完毕,模板解析完成,已经把组件挂载到页面上attached () {// 一般页面中的交互会在attached钩子函数中进行this.setData({})}, // 组件被销毁detached () {},ready () {}, moved () {}}
})
10.组件所在页面的生命周期
  • 组件中还有一些特殊的生命周期,其与组件没有很强的关联
  • 主要用于组件内部监听父组件的展示、隐藏状态、从而方便组件内部执行一些业务逻辑的处理
  • 共四个:show, hide, resize, routeDone, 要在pageLifetimes中声明

在这里插入图片描述

pageLifetimes: {// 监听组件所在页面展示(后台切前台)状态show () {},// 监听组件所在页面隐藏(前台切后台,点击tabbar)状态hide () {}}

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

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

相关文章

03_性能优化:让软件呼吸更顺畅

引言 在用户对软件响应速度近乎苛刻的今天&#xff0c;性能已成为产品竞争力的核心指标。据Google研究&#xff0c;页面加载时间每增加1秒&#xff0c;转化率就会下降20%。本文将从前端、后端、移动端三个维度&#xff0c;揭示性能优化的核心策略与实战技巧&#xff0c;帮助你打…

LangChain4j 框架模仿豆包实现智能对话系统:架构与功能详解

系统整体架构设计基于 LangChain4j 框架构建的智能对话系统采用 "前后端分离 大模型中枢" 的三层架构设计&#xff0c;实现了与豆包类似的智能交互体验。系统架构图如下所示&#xff1a;┌────────────────────────────────────…

基于uni-app的书法学习管理小程序的设计与实现

一、设计的目的 书法是中华民族传统文化的瑰宝&#xff0c;更是人类文明的宝贵财富&#xff0c;具有深远的意义和实价值。在当今数字化时代&#xff0c;随着信息技术的飞速发展&#xff0c;传统书法学习模式面临着诸多挑战和需要解决的问题。为推动书法学习的现代化转型&#…

NumPy 函数库在数学建模中的基本使用方法

一、引言 在数学建模的世界里,我们常常需要处理大量的数据和进行复杂的数值计算。Python 中的 NumPy 库就像是一位得力的助手,它为我们提供了强大的多维数组对象和丰富的数学函数,让我们能够高效地完成各种数值计算任务。接下来,我们将深入探讨 NumPy 在数学建模中的基本使…

模块三:现代C++工程实践(4篇)第一篇《C++模块化开发:从Header-only到CMake模块化》

引言&#xff1a;现代C工程化的核心挑战&#xff08;终极扩展版&#xff09; 在云计算与物联网时代&#xff0c;C项目规模呈指数级增长。传统Header-only开发模式暴露出编译效率低下、依赖管理混乱、版本冲突频发等致命问题。本文通过CMake 3.22Conan 2.0工具链的深度集成&…

uniapp启动图被拉伸问题

记录下&#xff1a; 安卓手机有不同的规格&#xff0c;很难所有规格都去适配。如果不适配所有机型&#xff0c;那么就会导致部分机型的启动图被拉伸。 安卓提供了.9.png图片格式&#xff0c;允许标注部分拉伸&#xff0c;这样启动图中间的logo就不会被拉伸。 下面2张图是没有…

stm32的三种开发方式

以下是针对STM32F103RC实现LED闪烁&#xff08;PC13引脚&#xff09;的三种开发方式示例代码&#xff0c;每种方式均保持相同的核心逻辑&#xff1a; 1. 寄存器开发方式&#xff08;直接操作寄存器&#xff09; #include "stm32f10x.h"int main(void) {// 1. 开启G…

SpringBoot问卷调查系统设计与实现

概述 基于SpringBoot开发的问卷调查系统&#xff0c;该系统集成了问卷管理、题目管理等多种功能模块。 主要内容 核心功能模块&#xff1a; ​​个人信息管理​​&#xff1a; 修改密码个人信息修改 ​​问卷管理​​&#xff1a; 问卷新增问卷修改问卷删除 ​​题目管理​…

Linux进程管理:从基础到实战

在 Linux 系统编程中&#xff0c;进程&#xff08;Process&#xff09; 是操作系统进行资源分配和调度的基本单位。理解进程的概念是掌握系统编程、多任务处理、并发编程的基础。 目录 一、什么是进程&#xff1f; 定义&#xff1a; 二、进程的生命周期 示例&#xff1a;查…

工业物联网中的 Modbus:传感器与网关通信实战(二)

四、实战案例解析 4.1 项目背景与目标 某智能工厂致力于提升生产过程的自动化和智能化水平&#xff0c;对生产线上的各种设备进行实时监控和数据分析。在该工厂的一个生产车间中&#xff0c;存在着大量的传感器&#xff0c;用于监测设备的运行状态、环境参数等信息。这些传感…

飞算 JavaAI 智控引擎:全链路开发自动化新图景

免责声明: 此文章的所有内容皆是本人实验测评&#xff0c;并非广告推广&#xff0c;并非抄袭。如有侵权&#xff0c;请联系&#xff0c;谢谢! 文章目录&#x1f4dd;前言一、飞算 Java AI 智能开发助手简介1.1何为飞算 Java AI智能助手&#xff1f;2.2 飞算Java AI 直击开发全场…

MYSQL数据库(九)MVCC-多版本并发控制

目录 一 前景导入 1 当前读 2 快照读 二 MVCC 1 隐藏字段 2 UndoLog 回滚日志 (1 UndoLog日志 (2 UndoLog版本链 3 Read View 面试八股 介绍一下MVCC 一 前景导入 1 当前读 可使当前事务读取的是最新版本的数据&#xff0c;读取时还要保证其他并发事务不能修改当中…

[Pytest] [Part 2]增加 log功能

开始实现需求之前先做个log类&#xff0c;可以给其他模块使用&#xff0c;也方便以后修改log类的功能和属性。 使用的是python中的logging包来进行简单的封装&#xff0c;具体代码如下 import logging import sysclass TefLogger:def __init__(self, logger_nameTEST_FRAMEWOR…

NeighborGeo:基于邻居的IP地理定位(三)

NeighborGeo:基于neighbors的IP地理定位 X. Wang, D. Zhao, X. Liu, Z. Zhang, T. Zhao, NeighborGeo: IP geolocation based on neighbors, Comput. Netw. 257 (2025) 110896, 3. NeighborGeo 本文提出NeighborGeo,利用图结构学习和有监督对比学习来建立可靠的地标-目标关…

python使用fastmcp包编写mcp服务端(mcp_server)和mcp客户端(mcp_client)

安装fastmcp pip install fastmcp编写mcp服务端代码 from fastmcp import FastMCP mcp FastMCP(weather)mcp.tool() def get_weather(city: str):获取对应城市的天气:param city: 目标城市:return: 该城市的天气return f"{city}天气晴朗&#xff0c;温度60度&#xff01…

(1)机器学习小白入门 YOLOv:从概念到实践

(1)机器学习小白入门YOLOv &#xff1a;从概念到实践 (2)机器学习小白入门 YOLOv&#xff1a;从模块优化到工程部署 (3)机器学习小白入门 YOLOv&#xff1a; 解锁图片分类新技能 目标检测一直是一个机器学习的一个重要的应用方向。而 YOLOv&#xff08;You Only Look Once&…

Appium 简介

Appium 是一个开源的移动应用自动化测试框架&#xff0c;用于测试原生应用(native)、混合应用(hybrid)和移动网页应用(mobile web)。它支持 iOS、Android 和 Windows 平台。 https://www.bilibili.com/video/BV1R93szkEhi/? App自动化测试&#xff1a;App测试AppiumUiAutomato…

【C语言刷题】第十一天:加量加餐继续,代码题训练,融会贯通IO模式

&#x1f525;个人主页&#xff1a;艾莉丝努力练剑 ❄专栏传送门&#xff1a;《C语言》、《数据结构与算法》、C语言刷题12天IO强训、LeetCode代码强化刷题 &#x1f349;学习方向&#xff1a;C/C方向 ⭐️人生格言&#xff1a;为天地立心&#xff0c;为生民立命&#xff0c;为…

免费版安全性缩水?ToDesk、TeamViewer、向日葵、网易UU远程访问隐私防护测评

一、前言 在这个居家办公、远程技术支持成为常态的时代&#xff0c;我们经常需要把电脑控制权交给远方的同事或技术人员。但你想过没有&#xff0c;那些免费远程控制软件&#xff0c;真的能保护好你的隐私吗&#xff1f; 好用的远程软件通常会收费运营&#xff0c;投入经费去开…

nginx部署发布Vite项目

1 引言 在之前的文章《Ubuntu云服务器上部署发布Vite项目》中笔者使用了Vite提供的预览服务(npm run preview)来在云服务器上发布Web应用。这样做轻量应用是没问题的&#xff0c;不过遇到一些专业的问题就不行了&#xff0c;最好还是使用专业的HTTP服务器。除此之外&#xff0…