【小程序】微信小程序自定义组件Component详细总结

news2025/1/16 3:41:57

1- 前言


在本文中你将收获

  1. 小程序如何使用自定义组件
  2. 自定义组件之间的传值
  3. 自定义组件中插槽的使用

2- 组件文件新建

2.1 定义组件

在根目录新建components文件夹,建立cell 文件夹,右击创建cell的Component组件

  • cell.js
  • cell.wxml
  • cell.json
  • cell.wxss

2.2 注册组件

页面的xxx.json ,usingComponent注册

"usingComponents": {
"item":"/components/item/item"
}

2.3 使用组件

<item></item>

2.4 图参考

在这里插入图片描述
在这里插入图片描述

3- 外部类和样式隔离

3.1定义组件

  • cell.wxml 文件
<view class="cell cell-class">
</view>
  • cell.wxss
/* pages/com/com.wxss */
.cell{
  color: tomato;
}
.mycell{
  color: #f70;
  line-height: 120rpx !important;
}
  • cell.js 文件
  /* 选项 */
  options:{
    /* 样式隔离:apply-shared 父影响子
    shared 父子相互影响   isolated 相互隔离
    */
    styleIsolation:'isolated',
  },
  //通过组件的外部类实现父组件控制自己的样式
  externalClasses:["cell-class"],

3.2 使用组件

<cell></cell>
<cell cell-class="mycell"></cell>

在这里插入图片描述

3.3 图解释

在这里插入图片描述

4- 组件插槽

4.1 默认插槽

  • cell.wxml
 <view class="cell">
  我是cell组件
  <slot></slot>
</view>
  • cell.js
  /* 选项 */
  options:{
    //允许多个插槽
    multipleSlots:true,
  },
  • cell.wxss
.cell{
  height: 88rpx;
  line-height: 88rpx;
  border-bottom: 1rpx solid #cccccc;
}
使用cell组件
<cell>
  <text>放假</text>
  <text>快点到来</text>
</cell>

在这里插入图片描述

4.2 命名多插槽

  • cell.wxml
 <view class="cell cell-class">
  <slot name="pre"></slot>
  我是cell组件
  <slot></slot>
  <slot name="next"></slot>
</view>
  • cell.js
  /* 选项 */
  options:{
    //允许多个插槽
    multipleSlots:true,
  },
  • cell.wxss
.cell{
  height: 88rpx;
  line-height: 88rpx;
  border-bottom: 1rpx solid #cccccc;
}
  • com.wxml
<!-- 插槽 -->
<cell>
  <text slot="pre">🐱‍👓</text>
  <text slot="next">🐱‍🚀</text>
  <text>放假</text>
  <text>快点到来</text>
</cell>
<cell cell-class="mycell">
  <text slot="next">🎉</text>
  <text slot="pre">🐱‍</text>
  <text>做核酸</text>
  <text>今天要做</text>
</cell>

在这里插入图片描述

5- 组件传参

5.1 父传子

5.1.1 定义组件
  • cell.wxml
<view class="cell">
  <text>{{title}}</text>
  <text>{{num}}</text>
</view>
  • cell.js
// components/cell/cell.js
Component({
  /* 选项 */
  options:{
    /* 样式隔离:apply-shared 父影响子
    shared 父子相互影响   isolated 相互隔离
    */
    styleIsolation:'isolated',
    //允许多个插槽
    multipleSlots:true,
  },
  /**
   * 组件的属性列表
   */
  properties: {
    title:{
      type:String,
      value:""
    },
    num:{
      type:Number,
      value:1
    }
  },

  /**
   * 组件的初始数据
   */
  data: {
    //定义组件自己的数据count
    count:1
  },
  /**
   * 组件的方法列表
   */
})

5.1.2 使用组件
  • com.wxml
<cell title="做核酸" num="{{5}}"></cell>
<cell title="烦呐"></cell> 
5.1.3 图解

在这里插入图片描述

5.2 子传参父

5.2.1 定义组件
  • cell.wxml
<view class="cell" bindtap="tapHd">
  <text>{{title}}</text>
  <text>{{count}}</text>
</view>
  • cell.js
// components/cell/cell.js
Component({
  /* 选项 */
  options:{
    /* 样式隔离:apply-shared 父影响子
    shared 父子相互影响   isolated 相互隔离
    */
    styleIsolation:'isolated',
    //允许多个插槽
    multipleSlots:true,
  },
  /**
   * 组件的属性列表
   */
  properties: {
    title:{
      type:String,
      value:""
    },
    num:{
      type:Number,
      value:1
    }
  },

  /**
   * 组件的初始数据
   */
  data: {
    //定义组件自己的数据count
    count:1
  },
  lifetimes:{
    //在组件生命周期attached挂载更新count
    attached(){
      console.log(this.data);
      //count 的值为父组件传递的num值
      this.setData({count:this.data.num})
    }

  },
  /**
   * 组件的方法列表
   */
  methods: {
    tapHd(){
      this.setData({count:this.data.count+5})
      //发送一个事件
      this.triggerEvent("cellclick",this.data.count)
    }
  }
})

5.2.2 使用组件
  • com.wxml
 <view class="cell" bindtap="tapHd">
  <text>{{title}}</text>
  <text>{{count}}</text>
</view> 
5.2.3 图解

在这里插入图片描述

6- 案例item组件

6.1 定义组件

  • 首先在根目录下创建一个专门放自定义组件的文件夹;
  • 然后在小程序编辑器里,右键,新建Component;

在这里插入图片描述

<!--components/item/item.wxml-->
<navigator class="item itemclass" url="{{url}}" open-type="{{openType}}" bindtap="itemclick">
  <view class="icon" wx:if="{{icon}}">
    <image src="{{icon}}" mode="aspectFill"/>
  </view>
  <view class="content">
    <view class="title" wx:if="{{title}}">
      {{title}}
    </view>
    <slot name="title" wx:else ></slot>
    <view class="right" wx:if="{{!showrslot}}">
      <view class="tip">{{tip}}</view>
      <view class="badge" wx:if="{{badge}}">
      <view wx:if="{{badge===true}}" class="dot">  </view>
        <view wx:else class="redbadge">{{badge}}</view> 
      </view>
      <view class="arrow"></view>
    </view>
    <slot name="right" wx:else></slot>
  </view>
</navigator>
/* components/item/item.wxss */
.item{
  line-height: 88rpx;
  display: flex;
  align-items: center;
  justify-content: space-between;
}
.icon{
  margin-left: 30rpx;
  margin-right: 30rpx;
  height: 100%;
  display: flex;
  align-items: center;
}
.icon image{
  width: 60rpx;
  height: 60rpx;
}
.content{
  padding: 0 30rpx;
  border-bottom: 1rpx solid #ccc;
  display: flex;
  flex: 1;
}
.title{
  flex: 1;
  color: #333;
  font-size: 35rpx;
}
.right{
  display: flex;
  align-items: center;
}
.right .arrow{
  height: 25rpx;
  width: 25rpx;
  border-top: 3rpx solid #999;
  border-right: 3rpx solid #999;
  transform: rotate(45deg);
}
.tip{
  color: #999;
  font-size: 28rpx;
}
.dot{
  height: 15rpx;
  width: 15rpx;
  background-color: #f30;
  margin-left: 15rpx;
  border-radius: 50%;
}
.redbadge{
  font-size: 20rpx;
  padding: 5rpx;
  background-color: #f30;
  width: 30rpx;
  max-height: 30rpx;
  line-height: 30rpx;
  color: #fff;
  text-align: center;
  margin-left: 15rpx;
  border-radius: 20rpx;
}

6.2 使用组件

  • 引入组件:在页面的 json 文件中进行引用声明;

在这里插入图片描述

<!-- 引用组件的json文件 -->
{
  "usingComponents": {
    "cell": "/components/cell/cell"
  }
}
  • 在页面的 wxml 中像使用基础组件一样使用自定义组件(名字和声明的保持一致)
<!-- 引用组件的wxml文件 -->
<!--pages/component/component.wxml-->
<item title="支付" icon="/images/icon01.png"></item>
<item title="相册" icon="/images/icon02.png"></item>
<item title="设置" ></item>
<item title="朋友圈" icon="/images/icon03.png" badge="{{true}}" tip="10条消息未读"></item>
<item title="卡包" icon="/images/icon04.png" badge="{{12}}" tip="12条消息未读"></item>
<item title="服务" icon="/images/icon05.png" showrslot="{{true}}">
  <switch checked="true" slot="right" />
</item>
<item>
<view slot="title">插槽title</view>
</item>
<item title="新闻" icon="/images/icon07.png" url="/pages/index/index" open-type="switchTab"></item>
<item title="life" icon="/images/icon08.png" url="/pages/life/life" ></item>

<item title="消息" icon="/images/icon06.png" showrslot="{{true}}" itemclass="myitem">
  <switch checked="true" slot="right" />
</item>
.myitem{
  line-height: 120rpx !important;
  background-color: #f0f0f0;
}


往期传送门

【Vue】描述项目中两个功能模块的业务(一点见解)
【Git】Git基础操作一文详解,入门易懂(附图和案例
【Vue3】整理的一些Vue3知识点和案例(Vue3 获取窗口宽和高)

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

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

相关文章

mmlab花朵分类结果展示(2)

花朵分类结果展示Grad-Cam可视化方法模型分析折线图和平均耗时展示计算量展示这一节我们继续上一节讲解训练结果测试与验证。Grad-Cam可视化方法 上一节我们讲述了数据增强的可视化方法&#xff0c;因为数据增强是训练模型前的步骤&#xff0c;所以即使我们没有训练结果也可以…

水稻插秧机分叉机构壳体零件数控加工工艺工装设计

目录 &#xff08;一&#xff09;产品介绍-------------------------------------------------------------------1 &#xff08;二&#xff09;计算生产纲领-------------------------------------------------------------2 1&#xff0c;计算生产纲领决定生产类型 2&#x…

【k哥爬虫普法】非法入侵计算机信息系统,获取1500万余条个人信息!

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rZDkxIyG-1668593948055)(https://s2.loli.net/2022/11/07/Lx2ZiWGpanJbOvc.png)] 我国目前并未出台专门针对网络爬虫技术的法律规范&#xff0c;但在司法实践中&#xff0c;相关判决已屡见不鲜&#x…

Mybatis---从入门到深化

一、什么是框架&#xff1f; 框架即一个半成品软件。开发者从头开发一个软件需要花费大量精力&#xff0c;于是有一些项目组开发出半成品软件&#xff0c;开发者在这些软件的基础上进行开发&#xff0c;这样的软件就称之为框架。 如果将开发完成的软件比作是一套已经装修完毕的…

超级实用的电脑小技巧大全

技巧一&#xff1a; 一些用户正在经历缓慢和间歇性的下载速度。 解决方案&#xff1a; 比如小编在下载界面做了温馨提示&#xff0c;要求用户在使用本软件前&#xff0c;退出电脑上安装的任何杀毒软件&#xff08;360安全卫士、QQ管家、金山卫士、百度卫士等&#xff09;&am…

C语言 - 通讯录详解

通讯录 文章目录1. 基本思路2.代码实现2.1 定义各种**宏**和**结构体**。2.2 创建结构体并进行初始化2.3 打印菜单&#xff0c;模拟用户的选择2.4 增加联系人2.5 删除联系人2.6 查找联系人2.7 修改联系人2.8 对通讯录进行升序排序2.9 打印通讯录2.10 结束程序并销毁通讯录3. 文…

再度入榜 | 中睿天下入选《中国网络安全企业100强》

近日&#xff0c;国内权威网络安全媒体、第三方安全咨询机构安全牛发布第十版《中国网络安全企业100强》&#xff08;以下简称“百强”&#xff09;&#xff0c;中睿天下以强大的综合发展实力和强劲的发展势头再次荣登百强榜单。 安全牛作为国内网络安全行业权威媒体&#xff0…

能解决你80%关于存储的疑惑

概述 在计算机系统中&#xff0c;常用的存储介质包括寄存器、内存、SSD、磁盘等&#xff0c;寄存器的速写速度与CPU相同&#xff0c;一个时钟周期是0.3纳秒&#xff0c;而内存访问需要120纳秒&#xff0c;寄存器的读写速度比内存要快几百倍&#xff0c;固态硬盘访问需要50&…

Vue3基础(26)___defineProps、defineEmits、defineExpose组件通信

defineProps、defineEmits、defineExpose组件通信 在使用这个之前&#xff0c;我们需要知道setup的语法糖写法&#xff0c;因为上面的三个api需要在这个语法糖中才能使用&#xff1a; <script setup>console.log(LiuQing) </script>里面的代码会被编译成组件 set…

m分别通过GA遗传优化算法对企业不同产品订单生产进行时间优化

目录 1.算法概述 2.仿真效果预览 3.核心MATLAB代码预览 4.完整MATLAB程序 1.算法概述 首先介绍MATLAB部分的遗传算法的优化算法介绍&#xff1a; 遗传算法的原理 遗传算法GA把问题的解表示成“染色体”&#xff0c;在算法中也即是以二进制编码的串。并且&#xff0c;在执行…

WhatsApp营销引流-SendWS拓客系统功能后台介绍(五):WhatsApp素材管理

WhatsApp营销引流 很多新创的品牌想在海外推广自家产品&#xff0c;由于自己的品牌影响力不及其他老牌大牌&#xff0c;想在海外打开名气首先可以选择利用WhatsApp来进行营销引流&#xff0c;这是最简单最直接的方法&#xff0c;只需要低成本即可实现高回报。 据统计WhatsApp…

Python面向对象

目录 1.初识对象 2. 类的成员方法 3. 类和对象 4. 构造方法 5. 其它内置方法 6. 封装 7. 继承 7.1 继承的基础语法 7.2 复写和调用父类成员 8. 多态 1.初识对象 1. 生活中或是程序中&#xff0c;我们都可以使用设计表格、生产表格、填写表格的形式组织数据。 2. 进…

【2011】408联考操作系统真题整理

2011年 23 题目 满足短作业优先且不会发生饥饿现象的调度算法&#xff1a;高响应比优先 解析 24 题目 用户态执行的是命令解释程序 解析 法一&#xff1a;正向选择 DOS对应联机命令接口 法二&#xff1a;逆向排除 非用户态 -> 内核态 25 题目 在支持多线程的…

vs2019搭建与配置Qt,并实现影像显示

vs2019搭建与配置Qt&#xff0c;并实现影像显示 1.关于qt在vs2019的配置 主要参考了这个博客 其中有一个我在配置过程中出现的问题&#xff0c;在此记录一下 Qt Visual Studio Tools 在vs2019一直无法加载&#xff0c;一直在initializing,且提示"未能正确加载qtvstools…

数据库的基本操作(4)

先总结一下上一章的内容。 1.修改 update 表名 set 列名 值... where 条件&#xff1b; 2.删除 delete from 表名 where 条件&#xff1b; 3.mysql的约束 约束&#xff1a;数据库对数据本身有一些要求和限制。 NOT NULL 数据不能为空。 UNIQUE 数据唯一&#xff08;针…

【目标检测】目标检测的评价指标(七个)

目录&#xff1a;目标检测的评价指标一、正样本与负样本二、真正(TP)、假正(FP)、真负(TN)、假负(FN)&#xff08;1&#xff09;正确的正向预测&#xff08;True Positive&#xff0c;TP&#xff09;&#xff1a;正样本被正确检测的数量&#xff08;2&#xff09;错误的正向预测…

国际海运详解:国际海运的发货方式有哪些?区别是什么?

在跨境物流运输中&#xff0c;海运是一个种常用的运输方式&#xff0c;下面来重点介绍国际海运的几种发货方式和区别&#xff1a; 一、电放提单 是电报放货的缩写。提单信息以电子报纸或电子信息的形式发送给目的港船公司&#xff0c;收货人可以更换加盖电子印章的提单和电子保…

LeetCode-775-全局倒置与局部倒置

1、数学方法 根据题意&#xff0c;显然全局倒置的值大于等于局部倒置的值。因此我们不必求出具体的全局倒置的值和局部倒置的值&#xff0c;我们只需要证明全局倒置的值大于局部倒置的值即可。 因此我们可以从后往前进行查询&#xff0c;只要我们能够证明区间[i1,n−1][i1,n-…

小啊呜产品读书笔记001:《邱岳的产品手记-02》开篇词010203讲

小啊呜产品读书笔记001&#xff1a;《邱岳的产品手记-02》 开篇词&01&02&03讲一、今日阅读计划二、泛读&知识摘录1、开篇词 产品经理的世界没有对错2、01讲 验证码是个好设计吗&#xff1f;3、02讲 产品经理工具指南4、03讲 产品案例分析Trigraphy的设计哲学三…

VS2019编码修改为UTF-8的方法

1.修改windows系统配置 设置 时区和语言 语言 》 管理语言设置 2. 修改VS2019 在扩展里安装Force UTF-8(No BOM) 和 Fix File Encoding 插件 解决控制台中文乱码问题 1.按下winr&#xff0c;输出regedit&#xff0c;打开注册表编辑器 2.在注册表编辑器中打开路径HKE…