微信小程序开发系列-08自定义组件模版特性

微信小程序开发系列目录

  • 《微信小程序开发系列-01创建一个最小的小程序项目》
  • 《微信小程序开发系列-02注册小程序》
  • 《微信小程序开发系列-03全局配置中的“window”和“tabBar”》
  • 《微信小程序开发系列-04获取用户图像和昵称》
  • 《微信小程序开发系列-05登录小程序》
  • 《微信小程序开发系列-06事件》
  • 《微信小程序开发系列-07组件》

文章目录

  • 微信小程序开发系列目录
  • 前言
  • 自定义组件模版特性
    • 数据绑定
      • component-tag-name.wxml
      • component-tag-name.js
      • index.wxml
      • index.js
      • 运行结果
    • 多slot
      • component-tag-name.wxml
      • index.html
      • 运行结果
    • 抽象节点
      • 定义
      • 声明
      • 使用
      • 综合示例
  • 总结

前言

本文将学习自定义组件模版的三个特性:数据绑定、多slot、抽象节点。

自定义组件模版特性

数据绑定

在自定义组件中也可像普通页面一样进行数据绑定,同样是使用{{}}语法。这样就可以向自定义组件传递动态数据。

component-tag-name.wxml

在自定义组件中,定义了两个text用来显示属性propApropB

<view class="wrapper"><view>这里是组件的内部节点</view><view><text>propA: {{propA}}</text></view><view><text>propB: {{propB}}</text></view><slot></slot>
</view>

component-tag-name.js

属性propApropB的数据类型为String,并给了一个默认值。

Component({/*** 组件的属性列表*/properties: {propA: {type:String,value:"propA"},propB: {type:String,value:"propB"}},/*** 组件的初始数据*/data: {},/*** 组件的方法列表*/methods: {}
})

index.wxml

页面index绑定了数据dataFieldAdataFieldB

<view><my-component prop-a="{{dataFieldA}}" prop-b="{{dataFieldB}}"><!-- 这部分内容将被放置在组件 <slot> 的位置上 --><view>这里是插入到组件slot中的内容</view> </my-component>
</view>

index.js

数据dataFieldAdataFieldB设置相应的值。

Page({data: {dataFieldA: 'hello',dataFieldB: 'sif_666'},onLoad: function () {},
})

运行结果

请添加图片描述

多slot

在《微信小程序开发系列-07组件》中提到了slot节点,用于承载组件使用者提供的 wxml 结构。默认情况下,一个组件的 wxml 中只能有一个 slot 。需要使用多 slot 时,需要在组件 js 中声明启用。

如果在自定义组件中使用了多个slot,那么对使用者来说,应该怎么区分不同的slot呢?用name命令来区分不同的slot。
如果多个slot都没有用name命名,则只有第一个slot会生效。

请添加图片描述

在组件js中,设置多slot

options: {multipleSlots: true// 启用多slot支持},

component-tag-name.wxml

<view class="wrapper"><view>这里是组件的内部节点</view><view><text>propA: {{propA}}</text></view><view><text>propB: {{propB}}</text></view><slot name="slot1"></slot><slot name="slot2"></slot>
</view>

index.html

<view><my-component prop-a="{{dataFieldA}}" prop-b="{{dataFieldB}}"><!-- 这部分内容将被放置在组件 <slot> 的位置上 --><view slot="slot1">这里是插入到组件slot1中的内容</view> <view slot="slot2">这里是插入到组件slot2中的内容</view> </my-component>
</view>

运行结果

请添加图片描述

抽象节点

定义

自定义组件模板中的一些节点,其对应的自定义组件不是由自定义组件本身确定的,而是自定义组件的调用者确定的。这时可以把这个节点声明为“抽象节点”。(这句话读起来有点儿抽象哈,要结合例子看会比较容易理解。)

声明

抽象节点需要先声明后使用。抽象节点在哪个组件使用,就在哪个组件声明。

例如,自定义了一个“selectable-group”组件,该组件中包含有抽象节点"selectable",那么就需要在selectable-group.json中声明抽象节点“selectable”。

{"componentGenerics": {"selectable": true}
}

使用

在使用 selectable-group 组件时,必须要指定“selectable”抽象节点具体是哪个组件:

<selectable-group generic:selectable="custom-radio" />

这样,在生成这个 selectable-group 组件的实例时,“selectable”节点会生成“custom-radio”组件实例。

注意:节点的 generic 引用 generic:xxx="yyy" 中,值 yyy 只能是静态值,不能包含数据绑定。因而抽象节点特性并不适用于动态决定节点名的场景。即“custom-radio”只能“所见即所得”,不能使用{{}}动态绑定。

综合示例

我们现在来实现一个“选框组”(selectable-group)组件,它其中可以放置单选框(custom-radio)或者复选框(custom-checkbox)。这个组件(selectable-group)可以这样编写:

<!-- selectable-group.wxml -->
<view wx:for="{{labels}}" wx:key="*this"><label bindtap="itemTap" data-index="{{index}}"><selectable disabled="{{false}}" selected="{{selected[index]}}"></selectable>{{item}}</label>
</view>
// index/selectable-group.js
Component({data: {labels: [1, 2, 3],selected: [false, false, false],},methods: {itemTap: function(e) {var selected = [false, false, false];selected[e.currentTarget.dataset.index] = true;this.setData({selected: selected})}}
})

上述两段代码的逻辑是:每个selectable-group组件包含三个selectable节点。接下来再自定义两个组件“custom-checkbox”和“custom- radio”:

<!--custom-checkbox.wxml-->
<checkbox disabled="{{disabled}}" checked="{{selected}}"></checkbox>
// custom-checkbox.js
Component({properties: {disabled: Boolean,selected: Boolean,},
})
<!--custom-radio.wxml-->
<radio disabled="{{disabled}}" checked="{{selected}}"></radio>
// custom-radio.js
Component({properties: {disabled: Boolean,selected: Boolean,},
})

index页面:

<!--index.html-->
<view>selectable-group with custom-radio</view>
<selectable-group generic:selectable="custom-radio" />
<view>selectable-group with custom-checkbox</view>
<selectable-group generic:selectable="custom-checkbox" />
// index.json
{"usingComponents": {"selectable-group": "./selectable-group","custom-radio": "./custom-radio","custom-checkbox": "./custom-checkbox"}
}

运行结果

请添加图片描述

总结

本文学习了自定义组件模版3个特定:

  1. 数据绑定:可以实现外部向自定义组件内部动态传递数据。
  2. 多slot:自定义可以更加灵活地承载多个不同的外部组件。
  3. 抽象节点:我认为这个特性给了开发者更大的创造性,而不仅限于平台给出的节点 (或标签)。

标签也好、节点也好、组件也好,这些都是一些名词或术语,从表达的角度看,它们的作用是为了方便行文。对于开发者来说,重点还是要理解它们的实质含义。我个人认为,节点和组件本质上是一样的东西;在微信小程序的术语框架下,节点是一种更小的概念,而组件可以是节点也可以是节点的组合。

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

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

相关文章

点成案例 | 如何利用细胞计数仪在单细胞测序中评估细胞

一、概述 单细胞测序技术能够用来表征异常细胞群&#xff0c;分析稀有细胞和细胞图谱网络&#xff0c;发现异质性等。由于单细胞测序巨大的应用潜力&#xff0c;目前此技术正在经历爆炸性增长。然而&#xff0c;单细胞测序需要成本和时间的大量投资。为了确保时间和资源的投资…

正确的认识 字节码文件

上一篇中认识了JVM的基本组成&#xff0c;我们说JVM只认识字节码文件。那么在字节码文件进入JVM之前&#xff0c;我们先认识了解字节码文件长什么样&#xff0c;我们作为工程师不需要去死扣底层的理论知识&#xff0c;但是我们只是需要正确的打开字节码文件 知道里面有哪些部分…

[Angular] 笔记 22:ElementRef

chatgpt: ElementRef 是 Angular 中的一个类&#xff0c;它用于包装对 DOM 元素的引用。它允许开发者直接访问与 Angular 组件关联的宿主 DOM 元素。 当在 Angular 中需要直接操作 DOM 元素时&#xff0c;可以使用 ElementRef。通常情况下&#xff0c;最好避免直接操作 DOM&a…

Prism介绍

Prism介绍 Prism是一个框架&#xff0c;用于在WPF、Xamarin Forms、Uno Platform和WinUI中构建松散耦合、可维护和可测试的XAML应用程序。 设计目标 为了实现下列目的&#xff1a; 创建能够由模块组成的程序&#xff0c;这些模块能够被单独地编写、组装、部署&#xff0c;并且对…

十三:爬虫-Scrapy框架(下)

一&#xff1a;各文件的使用回顾 1.items的使用 items 文件主要用于定义储存爬取到的数据的数据结构&#xff0c;方便在爬虫和 Item Pipeline 之间传递数据。 items.pyimport scrapyclass TencentItem(scrapy.Item):# define the fields for your item here like:title scr…

jmeter函数助手-常用汇总

一.函数助手介绍 1.介绍及作用 介绍&#xff1a; jmeter自带的一个特性&#xff0c;可以通过指定的函数规则创建后进行调用该函数&#xff0c;在后续接口请求参数中进行调用 作用 &#xff08;1&#xff09;做参数化。 2.如何使用 jmeter工具栏-->工具-->函数助手…

LabVIEW在大型风电机组状态监测系统开发中的应用

LabVIEW在大型风电机组状态监测系统开发中的应用 风电作为一种清洁能源&#xff0c;近年来在全球范围内得到了广泛研究和开发。特别是大型风力发电机组&#xff0c;由于其常常位于边远地区如近海、戈壁、草原等&#xff0c;面临着恶劣自然环境和复杂设备运维挑战。为了提高风电…

DockerCompose - 容器编排、模板命令、compose命令、Pottainer 可视化界面管理(一文通关)

目录 一、DockerCompose 容器编排 1.1、简介 1.2、Docker-Compose 安装 1.2.1、在线安装 1.2.2、离线安装 1.3、docker-compose.yml 中的模板命令 前置说明 模板命令 1.4、DockerCompse 命令 前置说明 up down exec ps restart rm top pause暂停 和 unpause恢…

linux下的进程布局与ububtu操作系统下的proc文件夹学习笔记一

相关内容我写在公众号&#xff0c;写的挺详细的&#xff0c;欢迎关注我的公众号。请使用鼠标右键&#xff0c;新建标签页打开&#xff0c;直接点击显示参数错误&#xff0c;不知道怎么回事&#xff1f;linux下的进程布局与ububtu操作系统下的proc文件夹学习笔记 (qq.com)https:…

Windows下配置GCC(MinGW)环境

一、下载并安装MinGW 步骤1&#xff1a;下载MinGW安装器 前往MinGW的官方下载源&#xff0c;通过以下链接可以获取到最新版的MinGW安装程序&#xff1a; 网页地址&#xff1a;https://sourceforge.net/projects/mingw/files/ [MinGW 下载地址](https://sourceforge.net/proj…

二级路由的配置以及注意项

二级路由 比如说LayOut组件是父亲&#xff0c;LayOut和ArtComp是儿子&#xff0c;那我们怎么给儿子配路由呢&#xff1f; 1、首先在router下的index.js导入组件&#xff0c;配置规则&#xff0c;详细如下 // 导入路由相关组件 import LayOut from /views/LayOut import UserC…

页面布局--Flexbox的自动边距

标题页面布局–Flexbox的自动边距 通过简单的margin:auto&#xff0c;我们就能实现元素的多种对齐方式。 假设我们在盒子模型里有四个元素&#xff1a; 先给容器使用flex布局&#xff1a; .container {display: flex;justify-content: flex-start;align-items: center;gap: 6…

STM32F407-14.3.10-表73具有有断路功能的互补通道OCx和OCxN的输出控制位-00x00

如上表所示&#xff0c;MOE0&#xff0c;OSSI0&#xff0c;CCxE0&#xff0c;CCxNE0时&#xff0c;OCx与OCxN的输出状态取决于GPIO端口上下拉状态。 ---------------------------------------------------------------------------------------------------------------------…

Windows环境安装和运行shell脚本,值得收藏!

1. 安装步骤 1.1 下载安装包 官网下载地址Git - Downloads&#xff0c; 我们选择 Windows 版本&#xff1b; CSDN下载地址&#xff1a;windows版本下载&#xff1b; 1.2 环境变量配置 在系统变量中找到Path&#xff0c;将git安装目录下的bin&#xff08;我的安装路径&#x…

【华为机试】2023年真题B卷(python)-计算最大乘积

一、题目 题目描述&#xff1a; 给定一个元素类型为小写字符串的数组&#xff0c;请计算两个没有相同字符的元素长度乘积的最大值&#xff0c;如果没有符合条件的两个元素&#xff0c;返回0。 二、输入输出 输入描述: 输入为一个半角逗号分隔的小写字符串的数组&#xff0c;2 &…

数字PID算法基础

数字PID是由编程语言实现的PID算法并烧录到控制芯片中&#xff0c;控制芯片与电机驱动连接&#xff0c;将PID控制算法的输出转换为PWM控制信号发送给电机驱动电路&#xff0c;电机驱动电路与直流电机相连并将PWM控制信号转换为具有相同占空比的PWM供电电压&#xff0c;通过对输…

Jmeter之从CSV文件获取数据

新建csv文件 新建一个excel&#xff0c;填充业务数据&#xff0c;然后导出csv格式文件。 添加一个CSV数据文件 使用

认识K8S的基本概念和原理

K8S&#xff1a;Kubernetes8个字母省略就是k8s 自动部署&#xff0c;自动扩展和容器化部署的应用程序的一个开源系统 k8s是负责自动化运维管理多个容器化程序的集群。是一个功能强大的容器编排工具。分布式和集群化的方式进行容器管理。 k8s的版本&#xff1a;1.15或1.18。使…

RO-NeRF论文笔记

RO-NeRF论文笔记 文章目录 RO-NeRF论文笔记论文概述Abstract1 Introduction2 Related Work3 Method3.1 RGB and depth inpainting network3.2 Background on NeRFs3.3 Confidence-based view selection3.4 Implementation details 4 Experiments4.1 DatasetsReal ObjectsSynthe…

YOLOv5算法进阶改进(9)— 引入ASPP | 空洞空间金字塔池化

前言:Hello大家好,我是小哥谈。ASPP是空洞空间金字塔池化(Atrous Spatial Pyramid Pooling)的缩写。它是一种用于图像语义分割任务的特征提取方法。ASPP通过在不同尺度上进行空洞卷积操作,从而捕捉到图像中不同尺度的上下文信息。ASPP的主要思想是在输入特征图上应用多个不…