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. C# BS方向 该如何规划学习?【学习路线指南】

    C#学习路线指南 花费了几天时间整理了C#学习路线图,可以说是纯野生C#程序员成长路线规划,在这里分享下,希望可以帮助到想从事C#开发的同学们.本人阅历尚浅,有些知识点可能分享不正确,希望广大网友评论 ...

  2. Python开发篇——构建虚拟Python开发环境(Conda+Poetry)

    前言 之前虽略有提及Python,但是没有实际地写点料.惭愧,惭愧,所以这次先起个头,讲讲如何构建虚拟Python开发环境.相信之前看过我博客的人可能会想:博主不会又要聊聊Docker吧?放心,不会. ...

  3. 【spring源码系列】之【Bean的循环依赖】

    希望之光永远向着目标清晰的人敞开. 1. 循环依赖概述 循环依赖通俗讲就是循环引用,指两个或两个以上对象的bean相互引用对方,A依赖于B,B依赖于A,最终形成一个闭环. Spring循环依赖的场景有 ...

  4. linux服务器安装svn超详细介绍

    #!/bin/sh REPOS="$1" REV="$2" export LANG=en_US.UTF-8 LOG_PATH=/tmp/svn.log echo ...

  5. 规模化敏捷LeSS(二):LeSS*队实践指南

    Scrum 能够帮助一个5-9人的小*队以迭代增量的方式开发产品,在每一迭代结束时,交付潜在的可交付的产品增量.正是由于其灵活性,Scrum 方法现已成为*队软件交付方法的首选,近期发布的15届敏捷状 ...

  6. [考试总结]noip模拟26

    首先看到这样中二的题目心头一震.... 然而发现又是没有部分分数的一天. 然而正解不会打.... 那还是得要打暴力. 但是这套题目有两个题目只有一个参数. 所以... (滑稽).jpg 然后我就成功用 ...

  7. 【系统学习ES6】第一节:新的声明方式

    [系统学习ES6] 本专题旨在对ES6的常用技术点进行系统性梳理,帮助大家对其有更好的掌握.计划每周更新1-2篇,希望大家有所收获. 以前用ES5时,声明变量只能用var.ES6的出现,为我们带来了两 ...

  8. js学习笔记之日期倒计时DOM操作

    1.访问html元素 getElementById() 方法  返回对拥有指定 id 的第一个对象的引用,只有dom对象有效 getElementsByName() 方法  返回指定名称的对象集合 g ...

  9. Lazysysadmin靶机

    仅供个人娱乐 靶机信息 Lazysysadmin靶机百度云下载链接:https://pan.baidu.com/s/1pTg38wf3oWQlKNUaT-s7qQ提取码:q6zo 信息收集 nmap全 ...

  10. [Ynoi2011]初始化 题解

    第一道Ynoi,纪念一下. 众所周知,Ynoi会进行惨无人道的卡常操作,所以我们可以使用暴力去做Ynoi. 于是乎,我们考虑分块+暴力. 对于操作2,不难发现是道裸的分块,可以抄P3372的代码. 对 ...