1. 自定义组件

类似Vue或react中的自定义组件

小程序允许我们使用自定义组件的方式来构建页面

1.1 创建自定义组件

类似于页面, 一个自定义组件由json wxml wxss js 4个文件组成

可以在微信开发者工具中快速创建组件的文档结构



在文件夹内 components/myHeader, 创建组件 名为myHeader

1.1.1 声明组件

  • 首先需要在组件的 json文件中进行自定义组件声明

    myHeader.json
{
"component": true,
}

1.1.2 编辑组件

  • 同时, 还要再组件的wxml文件中编写组件模板, 在 wxss文件中加入组件样式, slot表示插槽, 类似Vue中的slot

    myHeader.wxml
<!--components/myHeader/myHeader.wxml-->
<view class="inner">
{{innerText}}
<slot></slot>
</view>
  • 在组件的wxss文件中编写样式

注意: 在组件中wxss不应该使用ID选择器、属性选择器和标签名选择器。

myHeader.wxss

/* components/myHeader/myHeader.wxss */
/* 这里的样式只应用于这个自定义组件 */
.inner {
color: red;
}

1.3 注册组件

  • 在组件的js文件中, 需要使用Component()来注册组件, 并提供组件的属性定义、内部数据和自定义方法

myHeader.js

// components/myHeader/myHeader.js
Component({
/**
* 组件的属性列表
*/
properties: {
// 这里定义了innerText属性, 属性值可以在组件使用时指定
innerText:{
// 期望要的数据都是 string类型
type: String,
// 默认值
value: "default value",
}
}, /**
* 组件的初始数据
*/
data: {
// 这里是一些组件内部的数据
someData:{}
}, /**
* 组件的方法列表
*/
methods: {
// 这里是一个组件内的自定义方法
selfMethod(){}
}
})

1.2. 声明引入自定义组件

首先要在页面的json文件中进行引用声明, 还要提供对应的组件名和组件路径 index.wxml

{
// 引用声明
"usingComponents": {
"my-header": "/components/myHeader/myHeader"
}
}

1.3 页面中使用自定义组件

  <!-- 自定义组件测试 -->
<view>
<!-- 以下是对一个自定义组件的引用 -->
<my-header inner-text="Some text">
<view>用来替代slot的</view>
</my-header>
</view>

2. 其他属性

Component 构造器可⽤于定义组件,调⽤ Component 构造器时可以指定组件的属性、数据、⽅法

等。

定义段 类型 是否必填 描述
properties Object
Map
组件的对外属性, 是属性名到属性设置的映射表, 参见下文
data Object 组件的内部数据, 和properties 一同用于组件的模板渲染
observers Object 组件数据字段监听器, 用于监听properties 和 data 的变化
methods Object 组件的方法, 包括事件响应函数和任意的自定义方法
created Function 组件生命周期函数, 在组件实例刚刚被创建时执行, 注意此时不能调用setData
attached Function 组件生命周期函数, 在组件实例进入页面节点树时执行
ready Function 组件生命周期函数, 在组件实例进入页面节点树时执行
moved Function 组件生命周期函数, 在组件实例被移动到节点树另一个位置时执行
detached Function 组件生命周期函数, 在组件实例被从页面节点树移除时执行

3. 自定义组件传参

  1. 父组件通过属性 的方式给子组件传递参数
  2. 子组件通过事件的方式向父组件传递参数

3.1 过程

  1. 父组件把数据{{tabs}} 传递到 子组件 的 tabItems 属性中
  2. 父组件 监听 onMyTab 事件
  3. 子组件 触发bindmytap中的mytap 事件
    1. 自定义组件触发事件时, 需要使用 triggerEvent方法, 指定事件名detail对象
  4. 父 → 子 动态传值 this.selectComponent("#tabs");

父组件代码

// page.wxml
<tabs tabItems="{{tabs}}" bindmytap="onMyTab" >
内容-这里可以放插槽
</tabs>
// page.js
data: {
tabs:[
{name:"体验问题"},
{name:"商品、商家投诉"}
]
},
onMyTab(e){
console.log(e.detail);
},

子组件代码

// com.wxml
<view class="tabs">
<view class="tab_title" >
<block wx:for="{{tabItems}}" wx:key="{{item}}">
<view bindtap="handleItemActive" data-index="{{index}}">{{item.name}}</view>
</block>
</view>
<view class="tab_content">
<slot></slot>
</view>
</view>
// com.js
Component({
properties: {
tabItems:{
type:Array,
value:[]
}
},
/**
* 组件的初始数据
*/
data: {
},
/**
* 组件的方法列表
*/
methods: {
handleItemActive(e){
this.triggerEvent('mytap','haha');
}
}
})

4. 注意事项

  1. 标签名 是 中划线的方式 -
  2. 属性名的方式 也是要中划线的方式
  3. 其他情况可以使用驼峰命名
    1. 组件的文件名如 myHeader.js的等
    2. 组件内的要接收的属性名 如 innerText

微信小程序学习笔记四 自定义组件的更多相关文章

  1. 微信小程序学习笔记五 常见组件

    1. 常见组件 重点讲解小程序中常用的布局组件 1.1 view 代替 原来的div标签 <!-- pages/index/index.wxml --> <view hover-cl ...

  2. 微信小程序学习笔记四 页面的生命周期

    1. 生命周期 1.1 对应阶段说明 onLOad(Object query) 1.1 页面加载时触发, 一个页面只会调用一次, 可以在 onLoad的参数中获取打开当前页面路径中的参数 1.2 参数 ...

  3. 微信小程序学习笔记二 数据绑定 + 事件绑定

    微信小程序学习笔记二 1. 小程序特点概述 没有DOM 组件化开发: 具备特定功能效果的代码集合 体积小, 单个压缩包体积不能大于2M, 否则无法上线 小程序的四个重要的文件 *js *.wxml - ...

  4. 【微信小程序学习笔记】入门与了解

    [微信小程序学习笔记(一)] IDE 下载安装 下载地址 官方工具:https://mp.weixin.qq.com/debug/w … tml?t=1476434678461 下载可执行文件后,可按 ...

  5. 微信小程序学习笔记一 小程序介绍 & 前置知识

    微信小程序学习笔记一 1. 什么是小程序? 2017年度百度百科十大热词之一 微信小程序, 简称小程序, 英文名 Mini Program, 是一种不需要下载安装即可使用的应用 ( 张小龙对其的定义是 ...

  6. 微信小程序学习笔记1--小程序的代码构成

    最近打算学习一下微信小程序,看了微信公众平台的文档感觉还比较简单,就从这个方向重新找回学习的状态吧: 1.先了解一下小程序的代码构成: 创建项目后会看到四种后缀的文件: .json 后缀的 JSON ...

  7. 微信小程序入坑之自定义组件

    前言 最近接触微信小程序,再次之前公司用的前端框架是vue ,然后对比发现,开发小程序是各种限制,对于开发者非常不友好.各种槽点太多,完全吐槽不过来,所以在此不多说,打算下次专门写一篇文章吐槽一下.本 ...

  8. 微信小程序学习笔记(二)--框架-全局及页面配置

    描述和功能 框架提供了自己的视图层描述语言 WXML 和 WXSS,以及基于 JavaScript 的逻辑层框架,并在视图层与逻辑层间提供了数据传输和事件系统,让开发者能够专注于数据与逻辑. 响应的数 ...

  9. 微信小程序学习笔记(阶段一)

    一阶段学习过程: (一)看官方文档的简易教程:https://mp.weixin.qq.com/debug/wxadoc/dev/ (二)看小码哥视频:https://chuanke.baidu.co ...

随机推荐

  1. 汉诺塔Python

    刚开始看python实现汉诺塔,自己想了很久才想明白,在这里记录一下,希望以后忘记能够立马记起. n=1时,可以直接a->c n=2时,可以借助b然后将a->c n=3时,可以将最上面的那 ...

  2. Spring RestTemplate 之put、delete请求

    ●PUT请求:在RestTemplate中,PUT请求可以通过put方法调用,put方法的参数和前面介绍的postForEntity方法的参数基本一致,只是put方法没有返回值而已.举一个简单的例子, ...

  3. 微信小程序云开发-云存储-带图片的商品列表携带id跳转至商品详情

    一.商品列表页 1.wxml文件 在view中添加点击事件goToGoodDetail,绑定数据data-id <!-- 添加点击事件goToGoodDetail --> <view ...

  4. 基于小熊派Hi3861鸿蒙开发的IoT物联网学习【五】

    BearPi-HM_Nano开发板鸿蒙OS内核编程开发--消息队列 什么是消息队列?        答:消息队列中间件是分布式系统中重要的组件,主要解决应用耦合.异步消息.流量削锋等问题.实现高性能. ...

  5. 记一次系统崩溃事件【Mac版】

    事件:Mac系统崩溃,导致电脑数据丢失,以及数据安全备份措施的不到位的教训! 解决措施: 1.开机后按:Command+R 按开机键 ,进入Mac 实用工具, 选择磁盘工具.由于没有备份直接抹掉磁盘. ...

  6. 在Windows7/8/10 64位操作系统下安装并注册ocx控件

    例如: 先网上下载一个MtbLine.ocx控件放入C:\Windows\SysWOW64\目录下 1.首先确保你的 Windows7 账户是管理员权限 2.下载MtbLine.ocx控件,网上可搜到 ...

  7. jvm源码解读--13 gc_root中的栈中oop的mark 和copy 过程分析

    粘贴源码 package com.test; import java.util.Random; public class Test { static int number=12; private in ...

  8. upload-lab 靶场实战

    文件上传/下载 漏洞 冲冲冲,好好学习 2020.02.13 淦靶场之前,先来点知识铺垫铺垫. 文件上传漏洞 前端Js绕过. MIME类型绕过 后缀名大写写绕过 / php4 .php5 00截断 覆 ...

  9. 2020年度钻石C++C学习笔记(1)《博学谷》

    1.C语言概述 1.1 什么是C语言 一提到语言这个词语,自然会想到的是像英语.汉语等这样的自然语言,因为它是人和人交换信息不可缺少的工具. 而今天计算机遍布了我们生活的每一个角落,除了人和人的相互交 ...

  10. 时间转换 BASIC-14

    时间转换 给定一个以秒为单位的时间t,要求用"::"的格式来表示这个时间.表示时间,表示分钟,而表示秒,它们都是整数且没有前导的"0".例如,若t=0,则应输出 ...