微信小程序:自定义组件(Component)

【小程序】微信小程序自定义组件Component详细总结 在根目录新建components文件夹,建立cell 文件夹,右击创建cell的Component组件cell.jscell.wxmlcell.jsoncell.wxsscell.wxml 文件 阅读详情

微信小程序文档中提供的组件有限,一定程度上限制了开发需求,这里就需要我们自定义一些控件,实现开发需求。自定义控件有两种方式,一种是选择模板的方式,另一种是选择组件的方式来创建。这里我选择了组件方式来创建,这样只需引入组件和外部添加数据,内部展示数据,即可实现重用。
目前微信小程序提供的组件

1、文件目录结构

这里一定要注意我们目录结构,个人喜好把项目中的业务文件放在pages中,图片放在与pages同级的images文件中,第三方的sdk存放在libs文件中,工具类存放在utils文件中,同样把共用的自定义组件存放在同级的component文件中。这样便于管理,查找使用。
组件文件

2、自定义组件

微信小程序中没有select下拉选项框,这里选择组件的方式来自定义创建一个select组件。

在component文件目录下,创建一个select文件夹,随后select文件夹下手动创建:select.js、select.json、select.wxml、select.wxss 四个文件。(注意: 可以在select文件夹下自动创建上面?四个文件,自动创建的文件会自动配置好代码。只需在引入组件的时候,在引入组件的页面的json文件中配置组件的名称和组件的位置即可。)

2.2、配置组件

select.js、select.json、select.wxml、select.wxss上面四个文件是是我们手动创建的,那就需要我们手动配置代码。在json文件中写入代码:"component": true 表示自定义组件声明,代码如下所示。

{
  "component": true
}

同时,js文件中也需要写成这种格式,其代码如下:

Component({
  /**
 1. 组件的属性列表
   */
  properties: {
    selectArray: {
      type: Array,
    },
     // 初始时要展示的内容
    currentText:{
      type:String,
    }
  },

  /**
 2. 组件的初始数据
   */
  data: {
    isShow: false, // 初始option不显示
    arrowAnimation: {} // 箭头的动画
  },

  /**
 3. 组件的方法列表
   */
  methods: {
    //option的显示与否
    selectToggleAction: function () {
      // 获取当前option显示的状态
      var nowShow = this.data.isShow;
      // 创建动画
      var animation = wx.createAnimation({
        timingFunction: "ease"
      })
      this.animation = animation;
      if (nowShow) {
        animation.rotate(0).step();
        this.setData({
          arrowAnimation: animation.export()
        })
      } else {
        animation.rotate(180).step();
        this.setData({
          arrowAnimation: animation.export()
        })
      }
      this.setData({
        isShow: !nowShow
      })
    },
    //设置内容
    selectItemAction: function (e) {
      // 当前option的数据是引入组件的页面传过来的,所以这里获取数据只有通过this.properties
      var nowData = this.properties.selectArray;
      var index = e.target.dataset.index; // 当前点击的索引
      var current_text = nowData[index].name; // 当前点击的内容
      var current_type = nowData[index].type; // 当前点击的内容
      // 再次执行动画,注意这里一定是this.animation来使用动画!!!!!!
      this.animation.rotate(0).step();
      this.setData({
        isShow: false,
        current_text: current_text,
        arrowAnimation: this.animation.export()
      })
      // 内容更新后,需要把更新的数据传输出去
      var nowDate = {
        id: index,
        name: current_text,
        type: current_type
      }
      // 这里的 getNowData 要和外部的 bind:getNowData ,名称一定要对应
      this.triggerEvent('getNowData', nowDate);
      console.log("选择之后的current_text", current_text);
    }
  }
})
  1. Component构造器可用于定义组件,调用Component构造器时可以指定组件的属性、数据、方法等。
  2. properties是组件的对外属性,是属性名到属性设置的映射表,属性设置中可包含三个字段, type 表示属性类型、 value 表示属性初始值、 observer 表示属性值被更改时的响应函数。
  3. data 和普通页面的data一样,是组件的内部数据,和 properties 一同用于组件的模版渲染。
  4. methods组件的方法,包括事件响应函数和任意的自定义方法,关于事件响应函数的使用。在这里面获取数据有两种方法:一种是获取data里的数据: this.data.属性名;一种是获取 properties 中的属性值: this.properties.属性名。

注意!!!
如果还需要其他属性、数据、方法等可查看微信小程序官方文档 Component构造器。

在wxml文件中,代码如下所示:

<view class='section-select-box'>
  <view class='select-content' bindtap='selectToggleAction'>
    <view class='select-text'>{{currentText}}</view>
    <image class='select-img' src='../../images/icon_arrow_down.png' animation="{{arrowAnimation}}"></image>
  </view>

  <view class='select-list' wx:if="{{isShow}}">
      <view class='select-list-item' wx:for="{{selectArray}}" data-index="{{index}}" wx:key='{{index}}' bindtap='selectItemAction'>{{item.name}}</view>
  </view>
</view>
  1. animation方法是为了获取当前点击元素的索引与内容。这里 animation="{{arrowAnimation}}"是箭头转动的动画效果。
  2. bindtap='selectToggleAction' selectToggleAction 方法是控制下拉选项框隐藏和显示的事件。
  3. bindtap='selectItemAction' selectItemAction 是下拉选项框选择子项之后,设置内容的事件。
  4. wx:if="{{isShow}}" isShow是为了控制 option 选项显示与隐藏。

在wxss文件中,代码如下所示:

.section-select-box {
  margin: 20rpx 30rpx;
  width: 690rpx;
}

.select-content {
  border: 2rpx solid #e2e2e2;
  border-radius: 10rpx;
  background: white;
  font-size: 34rpx;
  position: relative;
  height: 80rpx;
  line-height: 80rpx;
  padding: 0 10px;
}

.select-text {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  font-size: 32rpx;
}

.select-img {
  position: absolute;
  right: 30rpx;
  top: 10rpx;
  width: 60rpx;
  height: 60rpx;
  transition: all .3s ease;
}

.select-list {
  background: white;
  width: inherit;
  position: absolute;
  border: 2rpx solid #e2e2e2;
  border-top: none;
  box-sizing: border-box;
  z-index: 3;
  max-height: 160rpx;
  overflow: auto;
}

.select-list-item {
  height: 30px;
  line-height: 30px;
  border-top: 2rpx solid #e2e2e2;
  padding: 0 10px;
  text-align: left;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  font-size: 14px;
}

.select-list-item:first-child{
  border-top: none;
}
2.3、使用组件
  1. 使用自定义组件前,需要在引入组件的页面的json文件中配置,比如我要在 index.wxml 中引入,那么在 index.json 中我就需要配置:
{
  "usingComponents": {
    "Select": "/component/select/select"
  }
}

注意事项:
Select 是你定义的组件的名称,后面的是组件所在的位置。 / 单斜杠表示根目录,是绝对路径。

如果控制台报错,出现没找到路径的情况,一定是自己填写的路径不对,认真检查路径代码。
你可能出现的报错!!!
配置好后,在wxml引入组件,代码如下:

  <Select class="section-select" select-array='{{selectArray}}'  current-text="{{current_text}}" bind:getNowData='getCurrentTextAction'></Select>
  1. select-array 是我在组件中自定义的属性名,这个是和组件所在的 js 中properties中的属性是对应的。在 properties 定义的属性中,属性名采用驼峰写法例如:selectArray。在引入组件的 wxml 中,指定属性值时则对应使用连字符写法例如:select-array='{{selectArray}},selectArray为select组件中所需展示的数据源。
  2. 这里getNowData是自定义的子组件需要触发的事件名,getNowData是引入组件的页面需要获取传过来的数据的自定义的事件名。
      // 内容更新后,需要把更新的数据传输出去
      var nowDate = {
        id: index,
        name: current_text,
        type: current_type
      }
      // 这里的 getNowData 要和外部的 bind:getNowData ,名称一定要对应
      this.triggerEvent('getNowData', nowDate);
      console.log("选择之后的current_text", current_text);

在引入组件的页面的js添加引入组件时,自定义的函数:

  getCurrentTextAction:function(e){
    let item = e.detail;
    this.setData({
      current_text: item.name, 
      current_type: item.type
    });
  }

console.log(“打印数据”,e.detail),传过来的值就在detail里面。

微信小程序开发初学:自定义组件component(1) 1.创建存放自定义组件的文件夹,最好命名为components,在此文件夹中创建一个文件夹,右键新建component,里面包含wxml,wxss,js,json文件。2.在四个文件中编写好自定义组件的框架,样式等。1.在Title.js中写入自定义属性。component属性传递。component创建。component调用。 阅读详情

相关推荐

微信小程序自定义组件 Component 2.0+:3步封装高复用首次引导组件

本文详细介绍了微信小程序自定义组件(Component)的高阶实践,通过3个核心步骤封装高复用的首次引导组件。内容包括组件化设计基础、引导组件实现步骤、高级功能实现以及性能优化技巧,帮助开发者提升组件化开发能力,实现代码复用和模块化。

hck341204的专栏 370

微信小程序中的组件的使用,

1.在跟目录下新建components/info文件夹 2.在info右键Component新建index文件,这里会生成四个文件 3.这里的"component": true,表示的是这里是一个组件。true表示是一个组件 4.定义属性 /** * 组件的属性列表 * 定义接受的属性 */ properties: { // 左侧标题 titles: { // 属性名 type: String, // 类型(必填),目前接受的类型包括:String,

weixin_44432032的博客 1707

微信小程序详解(7.自定义组件:Component 和 应用生命周期 页面生命周期)

介绍: 首先,我们要明白,自定义组件是什么东西,能干什么, 那么.既然是自定义组件,那么当然是自己定义的一个模块封装后,这个模块就叫做自定义组件,我们可以写多个功能不同的自定义组件,当我们需要使用时,只需要把它们引入到我们的项目中就可以直接使用了,极大的方便了我们的项目搭建和功能完善,并且使项目耦合降低,可读性强和维护性成本降低. 步骤: 1.创建一个自定义的文件夹,这个就不多做描述,直接在文件中和pages同级的位置创建一个自定义的文件,然后保存, 他就自动生成了 (注意:这个方式只有在微信小程序中使用时

a2690656046的博客 3616

微信小程序自定义组件Component的简单使用

首先为什么要使用component 这里列举2个例子, 1 如果项目中多个地方使用同一个弹框, 2 两个同事合作写一个界面, 这2中情况使用组件是比较好的选择 开始吧 第一步首先创建一个包用于存放组件 要把设置成组件需要在json中声明 "component": true, 如下直接复制也行 { "component": true, "usingComponents": {...

小牧在一直在学习,在前进的道路上大家一起学习,进步。 3759

【微信小程序开发(13)---自定义组件component】附:自定义组件 基础概念、创建和使用

与demo17文件夹同级,建立 components文件夹,并在其下建立Tabs子文件夹: (父组件是demo17,子组件是components文件夹下。父组件调用子组件,所以子组件中Tabs下各文件都需要作出改变。下面Tabs各文件有所体现) app.json中已经配置: { "pages":[ "pages/demo17/demo17" ] } demo17.js // pages/demo17/demo17.js Page({ /** * 页面的初始数据 */ data: {

追光者♂:记录、分享、总结、提升,现象级专栏《Python从入门到人工智能》作者,无惧黑暗,坚信曙光 667

高通AI Engine SDK(QNN)使用教程(环境配置、模型转换、量化、推理、分析)

高通AI Engine使用教程

weixin_51031772的博客 1万+

微信小程序(四)--- 自定义组件详解(properties,数据监听器,纯数据字段,插槽,父子间通信,behaviors)

properties修改,数据监听器,纯数据字段,插槽,父子间通信,behaviors,组件的创建引用,组件样式隔离

qq_61768389的博客 1万+

避坑指南:华为2288H-V5服务器安装系统时常见的RAID与驱动问题解决方案

本文针对华为2288H-V5服务器在安装系统时常见的RAID与驱动问题,提供了详细的避坑指南。文章深度解析了从BIOS版本兼容性核查、RAID配置实战到驱动加载与集成的全流程,重点解决了安装过程中因RAID控制器驱动缺失或兼容性问题导致的硬盘无法识别等典型故障,帮助用户高效完成系统部署。

weixin_29240711的博客 979

《十一》微信小程序中自定义组件的 Component()

Behavior():注册一个 behavior,接受一个 Object 类型的参数。// 定义 behavior// 引入的其它 behavior// 属性},// 数据data: {},// 数据字段监听器// 生命周期声明对象// 所在页面的生命周期声明对象// 方法methods: {})

花铛 8751

从零配置EtherCAT IGH主站:手把手教你处理内核版本与实时性优化的那些坑

本文详细指导如何从零配置EtherCAT IGH主站,涵盖内核版本适配、实时性优化及常见问题解决方案。通过精确匹配内核头文件、应用实时补丁和优化网卡驱动,帮助开发者实现微秒级响应,适用于工业自动化、机器人控制等高精度场景。

weixin_30790841的博客 382

MATLAB 与 STK 互联的两种连接方式详解

批量仿真推荐使用方法一;交互分析推荐使用方法二。可以根据具体任务灵活切换,也可以同时使用两种方式,提升建模与仿真的效率。

weixin_52370774的博客 1566

微信小程序:你必须知道的component自定义组件

Component概念 页面的数据怎么来的 生命周期 接收参数:properties observers 补充讲解:3d轮播图 思路

全网同名:PBitW,更多内容,可以搜索《普通前端进阶记》 3865

3. 动手运行第一个 SAP Fiori Elements 应用(ListReport 类型)

这个代理服务器能够自动监听我们 Fiori Elements 应用里向 ES5 Demo 系统发送的 OData 请求,拦截这个请求,并通过 Node.js 代码向 ES5 服务器转发,拿到响应数据后再交还给 Fiori Elements 应用。后者对自己发出的请求被代理这件事情一无所知。本文的任务是,大家按照我的介绍,在本地成功运行笔者准备的这个 Fiori Elements 应用。的错误消息, 说明大家安装的 Node.js 版本没有达到本地运行 Fiori Elements 的最低要求。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1671

微信小程序:1.自定义组件Component

1.自定义组件 组件化的概念,大家都不太陌生,简单点来说,就是将一些常用的,比如一个页面的搜索框。可能很多页面都会用到,这时候,就可以将它封装成为一个组件,最近由于要开始微信小程序的开发,所以就开始查漏补缺,发现自己之前刚入门时候,没有具体的去看组件化,所以现在就写个demo给大家看看 2.基本结构 首先,最基本的文件结构,应该是这样子的: 其中的component就是我们用于存放组件...

胡世林的博客 1329

基于Simulink与MATLAB的七轴OpenArm机械臂逆运动学仿真与轨迹规划完整指南

本文详细介绍了七自由度OpenArm机械臂在MATLAB/Simulink环境下的运动学仿真与轨迹规划实现方法。首先建立了机械臂的DH参数模型,验证了正运动学计算;随后提出了两种逆运动学求解算法(数值迭代法和臂型角参数化解析法)的MATLAB实现方案;最后在Simulink中搭建了完整的轨迹规划与控制系统。研究解决了七自由度冗余机械臂特有的多解性、奇异性和关节限位约束等核心问题,为OpenArm机械臂的运动控制提供了完整的技术方案和可运行代码实现。

AI的内部世界的博客 682

芒果YOLO11改进21:检测头Head篇:即插即用|新颖轻量化非对称多级压缩LADH检测头,原创改进适配YOLOv8高效检测头,检测头新颖性改进,全网首发独一份

检测头Head篇:即插即用|新颖轻量化非对称多级压缩LADH检测头,原创改进适配YOLOv8高效检测头,检测头新颖性改进,全网首发独一份

包括YOLOv5、YOLOv7、YOLOv8等模型改进 792

微信小程序:自定义组件component

一:新建文件 (1)新建自定义组件文件 在根目录新建components文件夹,然后右键新建自定义组件目录,最后右键新建Component 新建自定义组件 (2)组件json文件配置 { "component": true 这一组文件设为自定义组件 } (3)组件wxml编写 <!-- 子组件 --> <view>我是子组件</view&g...

Crazy_GirlLL的博客 533

存储硬盘格式怎么把512还原为520格式??

硬盘厂商工具(如SeaChestsg_format)可以调整扇区大小。备份数据,因为调整扇区会清除硬盘内容。根据硬盘型号和接口类型,选择合适的工具进行调整。如果你需要更详细的帮助,请提供你的硬盘型号和存储设备类型。希望如上措施及解决方案能够帮到有需要的你。PS:如若遇到采纳如下方案还是未解决的同学,希望不要抱怨&&急躁,毕竟影响因素众多,我写出来也是希望能够尽最大努力帮助到同类似问题的小伙伴,即把你未解决或者产生新Bug黏贴在评论区,我们大家一起来努力,一起帮你看看,可以不咯。

**My Coding Family** 1146

第12课 微信小程序Component构造器自定义组件:

第12课 微信小程序Component构造器自定义定义组件: 1.自定义创建组件: 2.在组件的my-component.json文件声明组件 my-component.json全部代码: { "component": true, } 3.设置组件的my-component.js代码: my-component.js全部代码: Component({ externalClass...

舜岳的博客 888

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

微信小程序开发初学:自定义组件component

component创建 1.创建存放自定义组件的文件夹,最好命名为components,在此文件夹中创建一个文件夹,右键新建component,里面包含wxml,wxss,js,json文件 2.在四个文件中编写好自定义组件的框架,样式等 component调用 1.在需要调用component组件的页面的配置文件json中,写入配置项: "usingComponents":{ "组件名1":"组件路径1", "组件名2":"组件路径2" } 例如 /* json文件 */ "usingComp

Dae_Lzh的博客 864

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

微信小程序自定义表格组件:miniprogram-table-component 完全指南

`miniprogram-table-component` 是一个专为微信小程序设计的自定义表格组件,采用原生小程序开发规范。该项目使用 JavaScript 作为主要编程语言,配合 WXML 和 WXSS 进行视图层构建,确保在微信小程序环境中稳定运行。 该项目提供了丰富的表格功能,包括基础表格展示、斑马纹样式、间隔边框、自定义表头样式、固定表头、横向滑动等,是小程序开发中数据展示的理想选择。

gitblog_01032的博客 746

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

微信小程序自定义表格组件:miniprogram-table-component 详细使用指南

miniprogram-table-component 是一个专为微信小程序设计的自定义表格组件,提供了丰富的表格功能和灵活的样式配置。该组件支持第三方 npm 包使用,是小程序开发中展示结构化数据的理想选择。 ## 项目基础介绍 该表格组件基于微信小程序原生开发规范构建,主要使用 JavaScript 作为编程语言,配合 WXML 和 WXSS 进行视图层描述。项目采用现代化的开发工具链,包

gitblog_00533的博客 897

微信小程序下拉框插件_微信小程序:自定义组件(Component)

微信小程序文档中提供的组件有限,一定程度上限制了开发需求,这里就需要我们自定义一些控件,实现开发需求。自定义控件有两种方式,一种是选择模板的方式,另一种是选择组件的方式来创建。这里我选择了组件方式来创建,这样只需引入组件和外部添加数据,内部展示数据,即可实现重用。目前微信小程序提供的组件1、文件目录结构这里一定要注意我们目录结构,个人喜好把项目中的业务文件放在pages中,图片放在与pages同级...

weixin_32616931的博客 1424

【亲测免费】 微信小程序自定义表格组件:miniprogram-table-component

`miniprogram-table-component` 是一个专为微信小程序设计的自定义表格组件,适用于小程序原生开发。该项目主要使用 JavaScript 作为编程语言,并利用微信小程序的 WXML 和 WXSS 进行视图层的描述。它遵循微信小程序的开发规范,确保在各版本微信中稳定运行。 ## 项目的核心功能 该表格组件实现了以下核心功能: 1. **基础表格**:提供基本的表格展示功...

gitblog_07612的博客 1109

微信小程序:2.自定义组件Component---加一点点强的版本

在上一篇的基础上,我们这儿再加上一些东西。 上回忘记提到了‘监听’,好吧,就是观察者模式,不多说废话,直接上代码。这个是自己封的下载的组件,里面注释个人觉得够多了 /** * 下载的组件 * params:{ * initshow:是否展示组件 * initshowprogress:是否展示进度条 * initpath:下载路径, * } * */ let download...

胡世林的博客 407
上一篇: web前端 -- Day26 js高级
下一篇: git常用命令
黑萝卜不黑
博客等级 码龄11年 41粉丝 103原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值