微信小程序学习笔记四 自定义组件
1. 自定义组件
类似Vue或react中的自定义组件
小程序允许我们使用自定义组件的方式来构建页面
1.1 创建自定义组件
类似于页面, 一个自定义组件由
jsonwxmlwxssjs4个文件组成
可以在微信开发者工具中快速创建组件的文档结构

在文件夹内 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. 自定义组件传参
- 父组件通过属性 的方式给子组件传递参数
 - 子组件通过事件的方式向父组件传递参数
 
3.1 过程
- 父组件把数据
{{tabs}}传递到 子组件 的tabItems属性中 - 父组件 监听 
onMyTab事件 - 子组件 触发
bindmytap中的mytap事件- 自定义组件触发事件时, 需要使用 
triggerEvent方法, 指定事件名、detail对象 
 - 自定义组件触发事件时, 需要使用 
 - 父 → 子 动态传值 
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. 注意事项
- 标签名 是 中划线的方式 
- - 属性名的方式 也是要中划线的方式
 - 其他情况可以使用驼峰命名
- 组件的文件名如 
myHeader.js的等 - 组件内的要接收的属性名 如 
innerText 
 - 组件的文件名如 
 
微信小程序学习笔记四 自定义组件的更多相关文章
- 微信小程序学习笔记五 常见组件
		
1. 常见组件 重点讲解小程序中常用的布局组件 1.1 view 代替 原来的div标签 <!-- pages/index/index.wxml --> <view hover-cl ...
 - 微信小程序学习笔记四 页面的生命周期
		
1. 生命周期 1.1 对应阶段说明 onLOad(Object query) 1.1 页面加载时触发, 一个页面只会调用一次, 可以在 onLoad的参数中获取打开当前页面路径中的参数 1.2 参数 ...
 - 微信小程序学习笔记二  数据绑定 + 事件绑定
		
微信小程序学习笔记二 1. 小程序特点概述 没有DOM 组件化开发: 具备特定功能效果的代码集合 体积小, 单个压缩包体积不能大于2M, 否则无法上线 小程序的四个重要的文件 *js *.wxml - ...
 - 【微信小程序学习笔记】入门与了解
		
[微信小程序学习笔记(一)] IDE 下载安装 下载地址 官方工具:https://mp.weixin.qq.com/debug/w … tml?t=1476434678461 下载可执行文件后,可按 ...
 - 微信小程序学习笔记一  小程序介绍 & 前置知识
		
微信小程序学习笔记一 1. 什么是小程序? 2017年度百度百科十大热词之一 微信小程序, 简称小程序, 英文名 Mini Program, 是一种不需要下载安装即可使用的应用 ( 张小龙对其的定义是 ...
 - 微信小程序学习笔记1--小程序的代码构成
		
最近打算学习一下微信小程序,看了微信公众平台的文档感觉还比较简单,就从这个方向重新找回学习的状态吧: 1.先了解一下小程序的代码构成: 创建项目后会看到四种后缀的文件: .json 后缀的 JSON ...
 - 微信小程序入坑之自定义组件
		
前言 最近接触微信小程序,再次之前公司用的前端框架是vue ,然后对比发现,开发小程序是各种限制,对于开发者非常不友好.各种槽点太多,完全吐槽不过来,所以在此不多说,打算下次专门写一篇文章吐槽一下.本 ...
 - 微信小程序学习笔记(二)--框架-全局及页面配置
		
描述和功能 框架提供了自己的视图层描述语言 WXML 和 WXSS,以及基于 JavaScript 的逻辑层框架,并在视图层与逻辑层间提供了数据传输和事件系统,让开发者能够专注于数据与逻辑. 响应的数 ...
 - 微信小程序学习笔记(阶段一)
		
一阶段学习过程: (一)看官方文档的简易教程:https://mp.weixin.qq.com/debug/wxadoc/dev/ (二)看小码哥视频:https://chuanke.baidu.co ...
 
随机推荐
- 汉诺塔Python
			
刚开始看python实现汉诺塔,自己想了很久才想明白,在这里记录一下,希望以后忘记能够立马记起. n=1时,可以直接a->c n=2时,可以借助b然后将a->c n=3时,可以将最上面的那 ...
 - Spring RestTemplate 之put、delete请求
			
●PUT请求:在RestTemplate中,PUT请求可以通过put方法调用,put方法的参数和前面介绍的postForEntity方法的参数基本一致,只是put方法没有返回值而已.举一个简单的例子, ...
 - 微信小程序云开发-云存储-带图片的商品列表携带id跳转至商品详情
			
一.商品列表页 1.wxml文件 在view中添加点击事件goToGoodDetail,绑定数据data-id <!-- 添加点击事件goToGoodDetail --> <view ...
 - 基于小熊派Hi3861鸿蒙开发的IoT物联网学习【五】
			
BearPi-HM_Nano开发板鸿蒙OS内核编程开发--消息队列 什么是消息队列? 答:消息队列中间件是分布式系统中重要的组件,主要解决应用耦合.异步消息.流量削锋等问题.实现高性能. ...
 - 记一次系统崩溃事件【Mac版】
			
事件:Mac系统崩溃,导致电脑数据丢失,以及数据安全备份措施的不到位的教训! 解决措施: 1.开机后按:Command+R 按开机键 ,进入Mac 实用工具, 选择磁盘工具.由于没有备份直接抹掉磁盘. ...
 - 在Windows7/8/10 64位操作系统下安装并注册ocx控件
			
例如: 先网上下载一个MtbLine.ocx控件放入C:\Windows\SysWOW64\目录下 1.首先确保你的 Windows7 账户是管理员权限 2.下载MtbLine.ocx控件,网上可搜到 ...
 - jvm源码解读--13 gc_root中的栈中oop的mark 和copy 过程分析
			
粘贴源码 package com.test; import java.util.Random; public class Test { static int number=12; private in ...
 - upload-lab 靶场实战
			
文件上传/下载 漏洞 冲冲冲,好好学习 2020.02.13 淦靶场之前,先来点知识铺垫铺垫. 文件上传漏洞 前端Js绕过. MIME类型绕过 后缀名大写写绕过 / php4 .php5 00截断 覆 ...
 - 2020年度钻石C++C学习笔记(1)《博学谷》
			
1.C语言概述 1.1 什么是C语言 一提到语言这个词语,自然会想到的是像英语.汉语等这样的自然语言,因为它是人和人交换信息不可缺少的工具. 而今天计算机遍布了我们生活的每一个角落,除了人和人的相互交 ...
 - 时间转换 BASIC-14
			
时间转换 给定一个以秒为单位的时间t,要求用"::"的格式来表示这个时间.表示时间,表示分钟,而表示秒,它们都是整数且没有前导的"0".例如,若t=0,则应输出 ...