微信小程序的自定义组件(1)

news2024/10/3 0:25:31

文章目录

  • 1. 自定义组件
  • 2. 组件样式
  • 3. 组件-数据、方法和属性
  • 4. 组件数据监听器
  • 5. 组件纯数据字段

1. 自定义组件

Component(Object object) | 微信开放文档 (qq.com)

创建组件

  1. 在项目的根目录中,鼠标右键,创建components->test文件夹
  2. 在新建的components->test文件夹上,鼠标右键,点击“新建Component”
  3. 键入组件的名称之后回车,会自动生成组件对应的4个文件,后缀名分别为js,json,wxml和wxss

局部引用组件

在页面的json配置文件中引用组件的方式,叫做“局部引用”。示例代码如下:

// 在页面的.json文件中,引入组件
{
    "usingComponents":{
        "my-test1":"/components/test1/test1"
    }
}
    
//在页面的.wxml文件中,使用组件
<my-test1></my-test1>

全局引用组件(居多)

在app,js0n全局配置文件中引用组件的方式,叫做“全局引用”。示例代码如下:

// 在app.json文件中,引入组件
{
    "pages":[/*省略不必要的代码*/[,
    "window":{/*省略不必要的代码*/},
    "usingComponents":{
	    "my-test2":"/components/test2/test2"
	 }
}

//在页面的.wxml文件中,使用组件
<my-test2></my-test2>

组件与页面的区别

从表面来看,组件和页面都是由js、json、wxml和wxss这四个文件组成的。但是,组件和页面的js与
json文件有明显的不同:

  1. 组件的json文件中需要声明"component":true属性
  2. 组件的js文件中调用的是Component()函数
  3. 组件的事件处理函数需要定义到methods节点中

2. 组件样式

组件样式隔离的注意点:

  1. app.wxss中的全局样式对组件无效

  2. 只有class选择器会有样式隔离效果,id选择器、属性选择器、标签选择器不受样式隔离的影响

    建议:在组件和引用组件的页面中建议使用class选择器,不要使用id、属性、标签选择器!

修改组件的样式隔离选项:

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

//在组件的js
Component({
    options:{
        styleIsolation:'isolated'
    }
})

//或在组件的json文件中新增如下配置
{
    "stylelsolation":"isolated"
}

3. 组件-数据、方法和属性

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

方法:methods节点下

//componet\tets\test.js
Component({
      //组件的方法列表【包含事件处理函数和自定义方法】
    methods:{
   		//事件处理函数
        addCount() {
          this.setData({
            count: this.data.count + 1,
              // 通过this直接调用自定义方法
          })
          this._showCount()
        },
        // 自定义方法建议以_开头
        _showCount(){
          wx.showToast({
            title: 'count是'+this.data.count,
            icon:'none'
          })
        }
        
    }
})
<!--componet\test\test.wxml-->
<button bindtap="addCount">+1</button>

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

Component({
     properties: {
       // 完整定义属性
        max: {
          // 属性的类型
          type: Number,
          // 属性默认值
          value: 10
        },
        // 简化定义属性,不需要指定默认值时候这么用
        // max:Number
  	  },
})

<my-test1 max="9"></my-test1>

data和properties的区别

在小程序的组件中,properties属性和data数据的用法相同,它们都是可读可写的,只不过:

  • data更倾向于存储组件的私有数据
  • properties更倾向于存储外界传递到组件中的数据

setData修改 properties的值

Component({
    properties:{
        max:Number
    },
    methods:{
        addCount({
            this.setData({
    			max:this.properties.max+1        
	        })
        })
	}
})

<view>max的属性值{{max}}</view>

4. 组件数据监听器

监听一般数据

// componet\test\test.js
data: {
    n1: 0,
    n2: 0,
    sum: 0
  },
 methods: {
   addN1() {
      this.setData({
        n1: this.data.n1 + 1
      })
   },
   addN2() {
      this.setData({
        n2: this.data.n2 + 1
      })
   }
 },
  observers: {
    'n1,n2': function (newN1,newN2) {
        this.setData({
          sum:newN1+newN2
        })
    }
  },

监听对象属性的变化:数据监听器支持监听对象中单个或多个属性的变化,示例语法如下

observers:{
    '对象.属性A,对象.属性B':function(属性A的新值,属性B的新值){
        // 触发此监听器的3种情况:
        //【为属性A赋值】使用setData设置this.data.对象,属性A时触发
        //【为属性B赋值】使用setData设置this.data.对象,属性B时触发
        //【直接为对象赋值】使用setData设置this.data.对象时触发
        //do something...
    }
}

案例

//component\test\test.js
data: {
    // 声明rgb对象
    rgb: {
      r: 0,
      g: 0,
      b: 0
    },
    fullColor: '0,0,0'
  },

  methods: {
    changeR() {
      this.setData({
        'rgb.r': this.data.rgb.r + 5 >= 255 ? 255 : this.data.rgb.r + 5
      })
    },
    changeG() {
      this.setData({
        'rgb.g': this.data.rgb.g + 5 >= 255 ? 255 : this.data.rgb.g + 5
      })
    },
    changeB() {
      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({
        fullColor: `${r},${g},${b}`
      })
    }
  }
<view style="background-color: rgb({{fullColor}});" class="colorBox">
  颜色值:{{fullColor}}
</view>
<button size="mini" type="default" bindtap="changeR">R</button>
<button size="mini" type="primary" bindtap="changeG">G</button>
<button size="mini" type="warn" bindtap="changeB">B</button>
<view>
  {{rgb.r}}, {{rgb.g}}, {{rgb.b}}
</view>
.colorBox{
  line-height: 200rpx;
  font-size: 24rpx;
  color: white;
  text-shadow: 0rpx 0rpx 2rpx black;
  text-align: center;
}

img

上述中可以通过**通配符监听所有属性

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

5. 组件纯数据字段

概念:纯数据字段指的是那些不用于界面渲染的data字段。

应用场景:例如有些情况下,某些data中的字段既不会展示在界面上,也不会传递给其他组件,仅仅在当前
组件内部使用。带有这种特性的data字段适合被设置为纯数据字段。

好处:纯数据字段有助于提升页面更新的性能。

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

options:{
	//指定所有_开头的数据字段为纯数据字段
	pureDataPattern: /^_/
},
data:{
    // 可以定义为纯数据字段
    _rgb: {
      r: 0,
      g: 0,
      b: 0
    },
    fullColor: '0,0,0'
}

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

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

相关文章

第十二章 计算学习理论

12.1 基础知识 计算学习理论研究的关于通过计算来进行学习的理论。即关于机器学习的理论基础&#xff0c;其目的是分析学习任务的困难本质&#xff0c;为学习算法提供理论保证&#xff0c;并根据分析结果指导算法设计。 12.2 PAC学习 计算学习理论中最基本的是概率近似正确&…

点击化学染料DBCO-PEG-CY7.5|Cyanine7.5-PEG-DBCO|花青素Cyanine7.5

​DBCO-PEG-CY7.5点击化学染料其中Cy7.5 (Cyanine 7.5) 是一种发近红外&#xff08;NIR&#xff09;荧光的花青素荧光染料。根据磺化与否&#xff0c;分为普通Cy7.5和磺化Cy7.5&#xff0c;但常常统称为Cy7.5。 Cy7.5的消光系数高&#xff0c;荧光也很亮&#xff0c;并且对pH不…

为什么很多人转行学习Web前端技术?

为什么很多人转行学习Web前端技术?不管你是工人阶层还是服务行业&#xff0c;是否想过转行IT&#xff0c;转行IT后肯定会选择一门编程语言进行深入学习&#xff0c;很多转行的人基础都不是太好&#xff0c;不是科班出身&#xff0c;甚至有的是专科乃至中专&#xff0c;前端的H…

cuda学习笔记3——cuda常用内存相关函数及其使用示例

cuda学习笔记3——cuda常用内存相关函数及其使用示例常用的GPU内存函数cudaMalloc()cudaMemcpy()cudaFree()代码示例常用的GPU内存函数 cuda程序将系统区分成host和device&#xff0c;二者有各自的memory。kernel可以操作device memory&#xff0c;为了能很好的控制device端内…

软件测试人员去外包公司待遇怎么样?外包薪资高吗?

&#x1f4cc; 博客主页&#xff1a; 程序员二黑 &#x1f4cc; 专注于软件测试领域相关技术实践和思考&#xff0c;持续分享自动化软件测试开发干货知识&#xff01; &#x1f4cc; 公号同名&#xff0c;欢迎加入我的测试交流群&#xff0c;我们一起交流学习&#xff01; 可能…

Python基础-画图:matplotlib

Python画图主要用到matplotlib这个库。具体来说是pylab和pyplot这两个子库。这两个库可以满足基本的画图需求。 pylab神器&#xff1a;pylab.rcParams.update(params)。这个函数几乎可以调节图的一切属性&#xff0c;包括但不限于&#xff1a;坐标范围&#xff0c;axes标签字号…

ESP32 OTA

装好Arduino环境后&#xff0c;做了一个遥控小车&#xff1a; 1、uni-app 包装 nipplejs (Nipplejs by yoannmoinet)做了一个简单的摇杆&#xff0c;调用ESP32的WebServer接口&#xff0c;控制小车 2、ESP32 连上路由的WiFI&#xff0c;用WebServer开发了一个接口&#xff0c…

PG::Wpwn

nmap -Pn -p- -T4 --min-rate1000 192.168.225.123 nmap -Pn -p 22,80 -sCV 192.168.225.123 查看80端口的页面 尝试枚举路径 发现了/wordpress路径 使用wpscan扫描 wpscan --url http://192.168.225.123/wordpress/ -e ap 使用exploit-db搜索“social warfare” https:/…

我国原油期货行业趋势:消费量上升及鼓励政策落地 成交额将继续增长

原油期货是最重要的石油期货&#xff0c;世界上重要的原油期货合约有4个&#xff1a;纽约商业交易所&#xff08;NYMEX&#xff09;的轻质低硫原油即“西德克萨斯中质油”期货合约&#xff1b;迪拜商品交易所的高硫原油期货合约&#xff1b;伦敦国际石油交易所&#xff08;ICE&…

【AIOT】蓝牙调研

经典蓝牙模块&#xff08;BT&#xff09;&#xff1a;泛指支持蓝牙协议在4.0以下的模块&#xff0c;一般用于数据量比较大的传输&#xff0c;如&#xff1a;语音、音乐等较高数据量传输。经典蓝牙模块可再细分为&#xff1a;传统蓝牙模块和高速蓝牙模块。传统蓝牙模块在2004年推…

非零基础自学Golang 第8章 包管理 8.1 工作区

非零基础自学Golang 文章目录非零基础自学Golang第8章 包管理8.1 工作区8.1.1 工作区结构8.1.2 GOPATH8.1.3 GOROOT8.1.4 GOBIN第8章 包管理 对于大部分编程语言来说&#xff0c;代码包都是最有效的代码管理方式&#xff0c;Go语言也是使用包来管理代码的。如同其他语言一样&a…

WPF 3D 点光源学习

先画一个平面&#xff0c;物体具有黄色的材质&#xff1b;不添加灯光&#xff0c;显示如下&#xff0c; 加入一个点光源&#xff0c;位置(1,1,1)、颜色白色&#xff0c;如下&#xff0c;照亮了物体&#xff0c;看到物体的材质&#xff1b; 点光源是从斜上方照过来的&#xff0…

SSM框架+Layui框架基础业务逻辑(一)

1.获取验证码以及验证码变换 // 改变验证码图片function chageImg(){document.getElementById("captchaPic").src"/captcha/getCode?time"new Date().getTime()} import cn.hutool.captcha.LineCaptcha; import org.springframework.stereotype.Controll…

HCIP-Cloud+Service+DevOps+Engineer+V2.0第二章持续规划与设计

学习总结&#xff0c;思维导图整理&#xff0c;免费分享。侵权删除 本博文为HCIP-Cloud Service DevOps Engineer V2.0培训系列内容&#xff0c;[完整学习路径](https://education.huaweicloud.com/programs/ff24fd88-c9f3-4045-9ecd-94afb7eac6ba/about)&#xff1b; 想进一…

[附源码]Python计算机毕业设计公立医院绩效考核系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

【Azure 架构师学习笔记】-Azure Logic Apps(1)-简介

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Logic Apps】系列。 前言 Azure Logic apps的学习也研究源自于最近项目的需要&#xff0c;对于新技术的学习&#xff0c;可以先了解What&#xff0c; why两部分&#xff0c; 也就是这是什么&#xff0c;为什么要用。另…

gin学习

文章目录零、知识补充GOPROXY地址一、准备工作1、安装gin包&#xff08;mod模式&#xff09;2、文档3、测试 hello gin二、GET POST PUT DELETE请求的使用1、修改端口号2、GET 查3、POST 增4、DELETE 删5、PUT 改6、如何取出参数6.1、GET6.2、POST DELETE PUT6.3、URI三、Bind模…

大二《web课程设计》网页制作HTML个人主题青春网站(带psd)

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

什么是零拷贝, 从 Java 到 Netty

前言 零拷贝是老生常谈的话题了, 不管是Kafka还是Netty都用到了零拷贝的知识, 本篇着重讲解了什么是零拷贝, 同时在Java和Netty中分别是怎么实现零拷贝的 什么是零拷贝 零拷贝是指计算机在执行IO操作的时候, CPU不需要将数据从一个存储区复制到另一个存储区, 进而减少上下文切…

SDN网络中的转发数据和数据传输

数据驱动的网络 从数据驱动的角度来看网络&#xff0c;会发现一张现实中的网络存在着各种数据。设计和管理一张网络&#xff0c;主要是设计数据&#xff0c;存储数据&#xff0c;管理数据和分析数据。网络数据的规模、复杂度和变化速度&#xff0c;这3方面决定了数据处理的难度…