微信小程序15: 小程序组件

news2024/11/24 2:21:37

创建组件

①在项目的根目录中,鼠标右键,创建components -> test文件夹

②在新建的components -> test文件夹上,鼠标右键,点击“新建Component‘

③键入组件的名称之后回车,会自动生成组件对应的4个文件,后缀名分别为js,json,wxml和wxSS

组件和页面的区别

组件的js和json与页面不同

  • 组件的json文件中需要声明compontent:true属性
  • 组件的js文件中调用的是Component()函数
  • 组件的事情处理函数需要定义methods节点

自定义组件样式

默认情况下,组件样式只会对当前组件生效,不会影响到组件之外的UI结构如图所示:
CleanShot 2024-04-26 at 00.28.41@2x.png
注意:app.wxss中的全局样式对组件无效
在使用组件的时候最好使用class选择器

修改组件的样式隔离

默认情况下,自定义组件的样式隔离特性能够防止组件内外样式互相干扰的问题。但有时,我们希望在外界能够控制组件内部的样式,此时,可以通过 stylelsolation修改组件的样式隔离选项,用法如下:
js配置

Compontent({
  options:{
    stylelsolation:"isolated"
  }
})

json配置

{
  "stylelsolation":"isolated"
}

CleanShot 2024-04-26 at 00.33.14@2x.png

引用方式

局部和全局、两种引用方式

局部引用:组件只能在当前页面进行引用

在页面的json文件红进行引用

{  
  "usingComponents": {
    "mytese":"/components/test/test"
  }
}

组件的使用

<mytese></mytese>

全部引用:组件可以在每个小程序中使用

在app.json文件中,引入组件

"usingComponents": {
  "mytest1":"/components/test1/test1"
}

然后在任何页面都可以使用该组件

<mytest1></mytest1>

经常使用的组件我们需要进行全局引用,局部引用在特定页面中

data数据

在小程序组件中,用于组件模版渲染和私有数据,需要定义到data节点中

/**
   * 组件的初始数据
   */
data: {
  count:1
},

methods方法

在小程序中,事件处理函数和自定义方法需要定义到methods节点中,示例如下:

<view>{{count}}</view>
<button bind:tap="addCount">+1</button>

js文件

methods: {
  addCount(){
    this.setData({
      count:this.data.count+1
    })
    this._showCount()
  },
  _showCount(){
    wx.showToast({
      title: 'count值为:'+this.data.count,
      icon:'none'
    })
  }
}
})

properties属性

在小程序组件中,properties是组件的对外属性,用来接收外界传递到组件中的数据,示例代码:

/**
   * 组件的属性列表
   */
properties: {
  max:{
    type:Number,
      value:10
  },
},

当然也可以不定义value直接定义number
max:Number
使用

methods: {
  addCount(){
    if(this.data.count>=9) return
    this.setData({
      count:this.data.count+1
    })
    this._showCount()
  },

使用setData修改properties的值

由于data数据和 properties属性在本质上没有任何区别,因此 properties 属性的值也可以用于页面渲染, 或使用 setData为 properties中的属性重新赋值,示例代码如下:

this.setData({
  max:this.properties.max+1
})

数据监听器

数据监听器用于监听和响应任何属性和数据字段的变化,从而执行特定的操作。他的作用类似于vue中的watch侦听器。在小程序组件中,数据监听器的基本语法格式如下:

observers:{
    '字段A, 字段B': function(){
      
    }
  }

数据监听器基本用法

在wxml中定义基本的dom结构,该案例是一个简单的加法案例

<view>{{number1}}+{{number2}} = {{sum}}</view>

<button size="mini" bind:tap="addn1">n1自增</button>

<button size="mini" bind:tap="addn2">n2自增</button>

然后定义js

//在Data中定义三个参数
data: {
  number1:0,
    number2:0,
    sum:0
},
//在method方法中定义addn1方法和addn2方法
methods: {
    addn1(){this.setData({number1:this.data.number1+1})},
    addn2(){this.setData({number2:this.data.number2+1})},

监听器监听对象属性的变化

数据监听器支持监听对象中单个或者多个属性的变化:
wxml渲染

HTML<view style="background-color: rgb({{fullColor}})" class="colorBox">颜色值为:{{fullColor}}</view>
<button size="mini" bind:tap="changeR" type="default">R</button>
<button size="mini" bind:tap="changeG" type="primary">G</button>
<button size="mini" bind:tap="changeB" type="warn">B</button>

wxss样式

.colorBox{
  height: 100rpx;
  color: white;
  text-align: center;
  line-height: 100rpx;
}

js

data: {
  rgb:{
    r:0,
      g:0,
      b:0
  },
  fullColor:'0,0,0'
},
methods: {
  changeR(){ // 修改rgb对象上的r属性的值
    this.setData({
      'rgb.r':this.data.rgb.r +5 >255?255:this.data.rgb.r+5
    })
  },
  changeG(){ // 修改rgb对象上g属性的值
    this.setData({
      'rgb.g':this.data.rgb.g+5>255?255:this.data.rgb.g+5
    })
  },
  changeB(){ //修改rgb对象上b属性的值
    this.setData({
      'rgb.b': this.data.rgb.b+5>255?255:this.data.rgb.b +5
    })
  }
},
// 监听数据节点
observers:{
  'rgb.r,rgb.g,rgb.b':function(r,g,b){
    // 监听数据变化改变值
    this.setData({
      // 为data中的fullColor重新赋值
      fullColor:`${r},${g},${b}`
    })
  }

}

监听对象中给所属性的变化

如果某个对象中需要被监听的属性太多,为了方便,可以使用通配符**来监听监听对象中所有属性的变化:

observers:{
  "rgb.**":function(obj){
    this.setData({
      fullColor:`${obj.r},${obj.g},${obj.b}`
    })
  }
}
}

这个在功能上和之前的代码分别监听不同颜色其实是一一对应的,只不过使用“**”通配符进行对象的监听比较简单,在实际开发中,各位开发人员可以更具程序具体情况使用。

纯数据字段

:::info
纯数据字段值的是那些不用于洁面渲染的data字段
:::
应用场景:例如在有些情况下,某些data中的字段既不会展示在界面上,也不会传递给其他组件,仅仅在当前组件内部使用。带有这种特性的data字段是河北设置为纯数据字段。
优势:纯数据字段有助于提升页面更新的性能。

使用规则

在Component的构造器的options节点中,指定pureDataPattern,为一个正则表达式,字段名符合这个正则表达的字段将成为纯数据字段:

Component({
  options:{
    // 在data中所有以下划线开头的都为纯数据字段
    pureDataPattern:/^_/
  },
  data:{
    a:'asasas'
      // _a为纯数据字段
      _a:'asasasas'
}
})

可以使用纯数据字段改造数据监听器案例

小程序组件的生命周期

CleanShot 2024-05-04 at 21.58.38@2x.png
在小程序组件中,最重要的生命周期函数有3个,分别是created、attached、detached。它们各自的特点如下:

  • 组件实例刚被创建好的时候,created生命周期函数会被触发
    • 此时还不能调用setData
    • 通常在这个生命周期函数中,只应该用于给组件的this添加一些自定义的属性字段
  • 在组件完全初始化完毕、进入页面节点树后, attached生命周期函数会被触发
    • 此时,this.data已被初始化完毕
    • 这个生命周期很有用,绝大多数初始化的工作可以在这个时机进行(例如发请求获取初始数据)
  • 在组件离开页面节点树后,detached生命周期函数会被触发
    • 退出一个页面时,会触发页面内每个自定义组件的detached生命周期函数
    • 此时适合做一些清理性质的工作

小程序生命周期函数的定义

:::info
小程序生命周期函数定义有两种方式,一种是旧的方法在Component里面进行定义,另外一种新的方法,新建一个lifetimes节点进行定义
:::
这里推荐使用新的lifetimes节点定义

lifetimes:{
    created(){
      console.log('创建声明周期');
    },
    attached(){
      console.log('attached');
    }
  }

若新旧两种生命周期在js中同时出现,新的优先

组件所在页面的生命周期

有时,自定义组件行为以来页面的状态变化,此时就需要用到组件再页面的生命周期。
在自定义组件中,组件所能访问到页面的声明周期函数一共有3个,分别是:
CleanShot 2024-05-06 at 10.19.54@2x.png
如何监听所在页面的生命周期函数?
需要再组件中定义PageLifetimes节点,示例代码如下:

pageLifetimes:{
    show:function(){
      //页面被展示
      console.log('test组件加载');
    },
    hide:function(){
      //页面被隐藏
      console.log('页面发生切换');
    },
    resize:function(size){
      //页面尺寸变化
    }
  }

注意:这里不是({}),而是直接{},有时候可能你会习惯打出({}).
在页面加载后生成随机RGB颜色值

pageLifetimes:{
    show:function(){
      //页面被展示
      // 生成三个rgb值
      let r = Math.floor(Math.random()*255)+1;
      let g = Math.floor(Math.random()*255)+1;
      let b = Math.floor(Math.random()*255)+1;
      this.setData({
        fullColor:`${r},${g},${b}`
      })
      console.log(r);
      console.log('test组件加载');
    },
    hide:function(){
      //页面被隐藏
      console.log('页面发生切换');
    },
    resize:function(size){
      //页面尺寸变化
    }
  }

当然这样写比较丑,我们还可以把方法放到method里面,然后再show中去调用那个方法。

自定义组件插槽

在自定义组件中,可以提供一个节点(插槽),用于承担组件使用者提供的wxml结构。
CleanShot 2024-05-06 at 11.06.12@2x.png

单个插槽

小程序中,默认每个自定义组件中只允许使用一个进行占位,这种个数上的限制叫做单个插槽。
组件wxml代码

<text>components/test1/test1.wxml</text>
<slot></slot>

使用组件代码

<view>
  <mytest1>
    <view>这是插槽填充的内容 </view>
  </mytest1>
</view>

多插槽

小程序自定义组件中,需要使用多个插槽时,可以在组件js文件中定义下面代码:

Component({
  options:{
    // 在组件定义时的选项目启动多slot支持
    multipleSlotes:true
  },
  properties:{},
  methods:{}
})

使用多插槽,可以使用多个slot标签占位使用不同的name进行区分
再组件中定义多个插槽

<!--components/test1/test1.wxml-->
<slot name="slot1"></slot>
<slot name="slot2"></slot>

使用者定义slot属性加上插槽名字就可以直接使用

<view>
  <mytest1>
    <view slot="slot1">我是插槽1的内容 </view>
    <view slot="slot2">我是插槽2的内容 </view>
  </mytest1>
</view>

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

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

相关文章

继承知识及扩展(C++)

1. 继承是什么&#xff1f; 继承是面向对象编程的三大特征之一&#xff0c;也是代码复用的手段之一。之前我们在很多的地方尝试函数的复用&#xff0c;而继承是为了类的复用提供了很好的方式。 &#xff08;1&#xff09;继承的代码怎么写 在一个类后面使用 &#xff1a;继承方…

JMeter - 如何测试REST API / 微服务

概述&#xff1a; 有许多方法和工具可用于测试REST API。 当我需要测试REST API时&#xff0c;在查看了各种工具和选项之后&#xff0c;由于以下原因&#xff0c;我选择了JMeter。 JMeter是免费和开源的。 JMeter可以从CSV文件中直接读取您的测试数据。参数化非常简单。 可以…

基于SWIFT框架的Phi-3推理、微调实战教程

近期&#xff0c; Microsoft 推出 Phi-3&#xff0c;这是 Microsoft 开发的一系列开放式 AI 模型。Phi-3 模型是一个功能强大、成本效益高的小语言模型 (SLM)&#xff0c;在各种语言、推理、编码和数学基准测试中&#xff0c;在同级别参数模型中性能表现优秀。为开发者构建生成…

零基础自学网络安全/Web安全(超详细入门到进阶)学完即可就业(含学习笔记)

一、为什么选择网络安全&#xff1f; 这几年随着我国《国家网络空间安全战略》《网络安全法》《网络安全等级保护2.0》等一系列政策/法规/标准的持续落地&#xff0c;网络安全行业地位、薪资随之水涨船高。 未来3-5年&#xff0c;是安全行业的黄金发展期&#xff0c;提前踏入…

ICode国际青少年编程竞赛- Python-1级训练场-变量练习

ICode国际青少年编程竞赛- Python-1级训练场-变量练习 1、 a 8 for i in range(8):Dev.step(a)Dev.turnRight()a - 12、 a 3 for i in range(4):Dev.step(a)Dev.turnRight()a a 1 Dev.step(5)3、 a 4 for i in range(4):Dev.step(2)Dev.step(-5)Dev.step(3)Spaceship.…

一次性邮箱API发送邮件的方法?如何配置?

一次性邮箱API发送邮件有哪些注意事项&#xff1f;怎么安全发信&#xff1f; 随着网络安全问题的日益凸显&#xff0c;如何安全、高效地发送邮件成为了一个亟待解决的问题。一次性邮箱API的出现&#xff0c;为我们提供了一种新的解决方案。那么&#xff0c;如何使用一次性邮箱…

在uni-app开发的小程序中引入阿里的多色图标

uniapp不支持阿里多色图标&#xff0c;需要使用工具iconfont-tools进行处理 1.首先 在阿里图标库将 需要的图标添加到项目中 并下载压缩包&#xff0c;取出iconfont.js文件 2.安装iconfont-tools,安装完成会显示出安装到了电脑的那个目录 3&#xff0c;进入目录就会看到下面的…

【Unity动画系统】动画层级(Animation Layer)讲解与使用

如何使用Unity的Animation Layer和Avater Mask把多个动画组合使用 想让玩家持枪行走&#xff0c;但是手里只有行走和持枪站立的动作。 Unity中最方便的解决办法就是使用动画层级animation layer以及替身蒙版avatar mask。 创建一个动画层级 Weight表示权重&#xff0c;0的话则…

MFC扩展库BCGControlBar Pro v34.1 - 可视化设计器、主题新升级

BCGControlBar库拥有500多个经过全面设计、测试和充分记录的MFC扩展类。 我们的组件可以轻松地集成到您的应用程序中&#xff0c;并为您节省数百个开发和调试时间。 BCGControlBar专业版 v34.1已正式发布了&#xff0c;这个版本包含了对Windows 10/11字体图标的支持、功能区和…

国内小白用什么方法充值使用ChatGPT4.0?

首先说一下IOS礼品卡订阅&#xff0c;目前最经济实惠的订阅方式&#xff0c;具体操作步骤 使用IOS设备充值&#xff0c;用 App Stroe 兑换券 1、支付宝地址切换旧金山&#xff0c;在里面买app store 的兑换卷 2、美区Apple ID登陆app store &#xff0c;充值兑换券 3、IOS设…

AI 数据观 | TapData Cloud + MongoDB Atlas:大模型与 RAG 技术有机结合,落地实时工单处理智能化解决方案

本篇为「AI 数据观」系列文章第二弹&#xff0c;在这里&#xff0c;我们将进一步探讨 AI 行业的数据价值。以 RAG 的智能工单应用场景为例&#xff0c;共同探索如何使用 Tapdata Cloud MongoDB Atlas 实现具备实时更新能力的向量数据库&#xff0c;为企业工单处理的智能化和自…

7款AI绘画软件推荐,必备工具,一键生成绘画

随着人工智能技术的不断发展&#xff0c;AI绘画软件在艺术创作中扮演着越来越重要的角色。这些软件利机器学习和深度学习算法&#xff0c;可以模仿艺术家的风格&#xff0c;并生成逼真的绘画作品。一起来见证下吧&#xff0c;先给大家展示下AI绘画生成的效果图&#xff1a; 一、…

边界框(bounding box) 目标物体的位置和大小 交并比(Intersection over Union,IoU) 锚框(Anchor box)

边界框(bounding box) 在检测任务中,我们需要同时预测物体的类别和位置,因此需要引入一些跟位置相关的概念。通常使用边界框(bounding box,bbox)来表示物体的位置,边界框是正好能包含物体的矩形框。 在目标检测任务中,边界框(bounding box,bbox)是一个非常重要的…

RS232/RS485转12路模拟信号隔离D/A转换器4-20mA0-20mA0-25mA0-5V0-10V0-75mV

特点&#xff1a; ● RS-485/232接口&#xff0c;隔离转换成12路标准模拟信号输出 ● 可选型输出4-20mA或0-10V控制其他设备 ● 模拟信号输出精度优于 0.2% ● 可以程控校准模块输出精度 ● 信号输出 / 通讯接口之间隔离耐压3000VDC ● 宽电源供电范围&#xff1a;10 ~ …

git与gitlab

目录 gitlab 下载与安装 重置管理员密码 gitlab命令 git远程gitlab相关命令 认证 补充 git git 分布式版本控制 安装 git的四个区域与文件的四个状态 使用git 常用命令 git 分布式管理系统 gitlab 企业私有库 github 公网共享库&#xff0c;全球…

2024五一赛数学建模ABC题成品论文word+完整代码数据汇总

2024五一赛A题参考论文42页1-3问可执行代码[py Mtlab双版本]各类可视化图表https://www.jdmm.cc/file/27105852024五一赛B题保姆级建模思路32页可执行代码[py mtlab]后续成品论文处理可视化图表https://www.jdmm.cc/file/27105862024五一赛C题成品论文23页word页1-3问可执行代码…

亚马逊自养号测评环境搭建需要准备哪些?

在当下电商领域竞争白热化的背景下&#xff0c;亚马逊平台的卖家们对流量之于店铺转化率的重要性有着深刻的认识。随着对平台内部流量的依赖逐渐减弱&#xff0c;他们纷纷寻求更多元化的途径来提升销售业绩和品牌的市场影响力。在此过程中&#xff0c;自养号测评成为了一种备受…

alphassl ocsp泛域名证书

泛域名SSL证书又可以称之为通配符SSL证书&#xff0c;这款SSL数字证书可以同时保护主域名以及主域名下的所有子域名&#xff0c;被广泛应用于各种类型的网站&#xff0c;为多个网站提供安全服务。AlphaSSL是比较知名的SSL证书品牌之一&#xff0c;旗下的OCSP泛域名SSL证书比较受…

linux——主从同步

1. 保证主节点开始二进制日志&#xff0c;从节点配置中继日志 2. 从节点的开启一个 I/O 线程读取主节点二进制日志的内容 3. 从节点读取主节点的二进制日志之后&#xff0c;会将去读的内容写入从节点的中继日志 4. 从节点开启 SQL 线程&#xff0c;读取中继日志的内容&a…

计算机视觉中的计算几何

计算几何领域出现于 20 世纪 70 年代&#xff0c;研究解决几何问题的数据结构和算法。这尤其包括确定图像内的拓扑结构&#xff0c;或者实际上是更高维的表示&#xff0c;例如点邻域&#xff0c;这可以帮助从数字图像数据等中导出几何意义[1]。 计算机视觉主要涉及静态或动态图…