微信小程序之自定义组件

news/2024/7/20 4:05:12 标签: 小程序, 前端

介绍:

今天主要来学习一下微信小程序的自定义组件,这也是基础部分的倒数第二节,最后还有一节生命周期,我们的微信小程序就算学习完成了

自定义组件

介绍:类似vue或者react中的自定义组件小程序允许我们使⽤自定义组件的方式来构建页⾯。


1. 创建自定义组件

介绍:

  1. 类似于页面,一个自定义组件由 json wxml wxss js 4个文件组成
  2. 可以在微信开发者⼯具中快速创建组件的⽂件结构
    在这里插入图片描述

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

在这里插入图片描述
1. 声明组件

⾸先需要在组件的 json ⽂件中进⾏⾃定义组件声明

myHeader.json

{
  "component": true
}

2.编辑组件

同时,还要在组件的 wxml ⽂件中编写组件模板,在 wxss ⽂件中加⼊组件样式

注意:slot 表⽰插槽,类似vue中的slot

myHeader.wxml中写入

<!-- 这是自定义组件的内部WXML结构 -->
<view class="inner">
 {{innerText}}
    <slot></slot>
</view>

在组件的 wxss ⽂件中编写样式

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

myHeader.wxss写入

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

3. 注册组件

在组件的 js ⽂件中,需要使⽤ Component() 来注册组件,并提供组件的属性定义、内部数据和
⾃定义⽅法

myHeader.js写入

Component({
  properties: {
    // 这里定义了innerText属性,属性值可以在组件使用时指定
    innerText: {
      // 期望要的数据是 string类型
      type: String,
          value: 'default value',
   }
 },
  data: {
    // 这里是一些组件内部数据
    someData: {}
 },
  methods: {
    // 这里是一个自定义方法
    customMethod: function(){}
 }
})

声明引入自定义组件

⾸先要在⻚⾯的 json ⽂件中进⾏引⽤声明。还要提供对应的组件名和组件路径

index.wxml写入

{
 // 引用声明
  "usingComponents": {
 // 要使用的组件的名称     // 组件的路径
    "my-header":"/components/myHeader/myHeader"
 }
}

页面中使用自定义组件

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

其他属性

定义段与示例⽅法

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

定义段类型是否必填描述
propertiesObject Map组件的对外属性,是属性名到属性设置的映射表,参⻅下⽂
dataObject组件的内部数据,和 properties ⼀同⽤于组件的模板渲染
observersObject组件数据字段监听器,⽤于监听 properties 和 data 的变化,参⻅ 数据监听器
methodsObject组件的⽅法,包括事件响应函数和任意的⾃定义⽅法,关于事件响应函数的使⽤,参⻅ 组件事件
createdFunction组件⽣命周期函数,在组件实例刚刚被创建时执⾏,注意此时不能调⽤ setData ,参⻅ 组件⽣命周期
attachedFunction组件⽣命周期函数,在组件实例进⼊⻚⾯节点树时执⾏,参⻅ 组件⽣命周期
readyFunction组件⽣命周期函数,在组件布局完成后执⾏,参⻅ 组件⽣命周期
movedFunction组件⽣命周期函数,在组件实例被移动到节点树另⼀个位置时执⾏,参⻅ 组件⽣命周期
detachedFunction组件⽣命周期函数,在组件实例被从⻚⾯节点树移除时执⾏,参⻅ 组件⽣命周期

组件-自定义组件传参

  1. ⽗组件通过属性的⽅式给⼦组件传递参数
  2. ⼦组件通过事件的⽅式向⽗组件传递参数

过程

  1. ⽗组件 把数据 {{tabs}} 传递到 ⼦组件的 tabItems 属性中
  2. ⽗组件 监听 onMyTab 事件
  3. ⼦组件 触发 bindmytap 中的 mytap 事件

(1). 自定义组件触发事件时,需要使⽤ triggerEvent ⽅法,指定 事件名 、 detail 对象

  1. ⽗ -->⼦ 动态传值 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');
   }
 }
})

小结:

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

总结:

今天主要学习了自定义组件的相关知识,自定义组件的知识还是有一点偏难的,特别是父传子子传父没有学过vue的小伙伴们,很容易就绕迷了,所以大家在自定义组件的时候一定要小心,慢慢学习不要贪多,最后一篇微信小程序之生命周期会等到明天发布,记得前来观看呦

最后作者创作不易,如果文章对你有帮助的话,记得留下你的点赞和关注呦


http://www.niftyadmin.cn/n/855159.html

相关文章

2020十一周学习生活小结

学习 又到了每周反省时间&#xff0c;说真的这周还没有感觉就已经过去了。由于上周日请了一天假期&#xff0c;所以在进度上有了一天的空白期。找学姐要了三天的练习后台管理系统的时间瞬间就剩了两天。感觉有点慌&#xff0c;所以接下来的两天时间就更加倍的去完成任务。好在…

TortoiseSVN更新不到文件解决办法

使用TortoiseSVN进行源代码管理&#xff0c;有时发现明明Repository里有个文件&#xff0c;客户端怎么Update都取不回来。 据说是TortoiseSVN 1.6的Bug。 解决办法&#xff1a; TortoiseSVN右键菜单里选择“Update to revision...”&#xff0c;弹出的对话框里“Update Depth”…

微信小程序完结篇之生命周期

介绍: 今天我们学习一下生命周期,这个是小程序基础的最后一个章节,小程序生命周期分为应用生命周期和页面生命周期 应用生命周期 属性类型默认值必填说明onLaunchfunction否监听⼩程序初始化。onShowfunction否监听⼩程序启动或切前台。onHidefunction否监听⼩程序切后台。o…

2020十二周学习生活小反思

学习小结 这周刚开始就遇到了难题 , 这次前后端交互的唯一的一个后端的依靠 , 已经两天没有来了, 倍感思念 , 遇到很多问题少了他很难继续进行下去 , 比如说某个数据用什么方式去传输 , 会不会返回数据之类 . 都不敢往下写了, 因为页面有点多 , 改一个其他都需要修改 . 也是经…

TypeScript超详细讲解

快速入门 介绍: 本篇文章我是跟随尚硅谷的李立超老师讲解的视频做的笔记,如果大家有时间的话可以学习一下老师的课程,讲的非常详细,如果时间不充裕的话,请看如下文章,进行学习 https://www.bilibili.com/video/BV1Xy4y1v7S2?p1 0、TypeScript简介 TypeScript是JavaScript的…

form表单使用小结

前后端交互的时候对于数据传输是必须的&#xff0c;form表单传输数据是经常使用的一种方式 下面总结一些最近遇到的问题 form表单外的按钮怎么提交form表单 在前端布局的时候&#xff0c;我们有时候需要将提交按钮放置在form表单外&#xff0c;这个时候怎么去提交指定的表单…

vs2015配置python环境_IronPython | VS2015 开发环境配置

IronPython | VS2015 开发环境配置 Python的开发环境我们有比较多的选择&#xff0c;pycharm、sublime text等等。但是作为.net平台的Python语言ironPython&#xff0c;VS2015可以说是一个很棒的IDE。 百度经验:jingyan.baidu.com 工具/原料 ironpython 2.7.5 VS 2015 百度经验…

Typescript(ts)之面向对象

介绍: 昨天学习了typescript 的安装及其基本语法,今天来学习ts中比较重要的面向对象 首先: 面向对象 面向对象是程序中一个非常重要的思想&#xff0c;面向对象的方法主要是把事物给对象化&#xff0c;包括其属性和行为。面向对象编程更贴近实际生活的思想。总体来说面向对…