程序员书籍笔记 程序员书籍笔记
  • HTML
  • CSS
  • JavaScript
  • 前端知识
  • Vue
  • MarkDown
  • git
  • Node.js
  • Linux
  • 51单片机
  • 四级
  • 第一学期课程
  • 操作系统
  • 计算机网络
  • 数据结构
  • 计算机组成原理
  • HTML5
  • Electron
  • 日记便签
  • 前端导航
GitHub (opens new window)
  • HTML
  • CSS
  • JavaScript
  • 前端知识
  • Vue
  • MarkDown
  • git
  • Node.js
  • Linux
  • 51单片机
  • 四级
  • 第一学期课程
  • 操作系统
  • 计算机网络
  • 数据结构
  • 计算机组成原理
  • HTML5
  • Electron
  • 日记便签
  • 前端导航
GitHub (opens new window)
  • Vue

  • Nuxt

  • Echarts

  • Node

  • git

  • express

  • 微信小程序

    • 基本介绍
    • 宿主环境介绍
    • 基础使用
    • wxss基础使用
    • 数据请求
    • 页面
    • 组件
      • 组件
        • 组件引用
        • 组件和页面
        • 组件隔离
      • 组件操作
        • methods
        • properties
      • 数据监听器
      • 纯数据字段
        • 使用规则
      • 生命周期函数
        • lifetimes
      • 所在页面的生命周期
        • pageLifetimes
      • 插槽
        • 多插槽使用
      • 父子组件通信
        • 属性绑定
        • 事件绑定
        • selectComponent
      • behaviors
    • 外部资源
  • Spring

  • 后端知识

  • Markdown

  • project

  • 自用文档查询

  • 框架和软件
  • 微信小程序
yuadh
2022-07-23
目录

组件

# 组件

components 组件文件夹

# 组件引用

局部引用

页面的 .json 文件

全局引用

app.json 文件中

# 组件和页面

  • 组件的 json 文件需要声明 component:true 属性
  • 组件的 js 文件调用的是 Component() 函数包裹
  • 组件的事件处理函数需要定义到 methods 节点中
  • 小程序的全局样式不会影响到组件的样式,组件隔离(但是只对类选择器有效)

# 组件隔离

可以使用 styleIsolation 属性来修改其配置,可以在 js 或 json 文件中添加配置

Component({
  options:{
    styleIsolation:'isolated'
  }
})
1
2
3
4
5

可选值

值 默认值 描述
isolated 是 启用样式隔离
apply-shared 否 接收外部样式
shared 否 双方共享样式

# 组件操作

  • 数据
  • 方法
  • 属性

# methods

Components({
  methods:{
    addCount(){
      this.setData({count:this.data.count+1})
      
    }
  	_showCount(){
  		wx.showToast({
  			title:this.data.count,
  			icon:'none'
			})
		}
  }
})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
  • 自定义方法建议以 _ 开头
  • 事件处理函数需要写在 methods 中

# properties

Components({
  properties:{
    max:{
      type:Number,
      value:10
    },
    min:Number
  }
})
1
2
3
4
5
6
7
8
9
  • 用来接收外界传递到组件中的值
  • 可以使用简写模式,不指定默认值

使用

<demo max="10"></demo>
1

data和properties区别

  • data 更倾向于存储组件的私有数据
  • properties 更倾向于外界传递到组件中的数据
addCount(){
  console.log(this.data)
  console.log(this.properties)
},
1
2
3
4

本质上没有区别,存储的是同一个数据

可以使用this.setData()来修改其值

this.setDate({
  count:this.data.count+1,
  max:this.properties.max+1
})
1
2
3
4

# 数据监听器

苏剧监听器用于监听和响应任何属性和数据字段的变化,从而执行特定的操作

数据的监听

Component({
  observers:{
    'n1,n2':function(newN1,newN2){
      this.setDate({
        sum:newN1+newN2
      })
    }
  }
})
1
2
3
4
5
6
7
8
9

属性的监听

一样的使用

Component({
  observers:{
    'n1.a,n2.b':function(a,b){
      this.setDate({
        sum:a+b
      })
    }
  }
})
1
2
3
4
5
6
7
8
9

也可以监听某数据所有属性的变化使用通配符:

observers:{
  'obj.**':function(obj){
    this.setDate({
        sum:obj.a+obj.b
      })
  }
}
1
2
3
4
5
6
7

# 纯数据字段

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

既不会展现在界面上,也不会传递给其它组件,仅仅在组件内部使用

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

# 使用规则

在构造器的 options 配置节点中,指定pureDataPattern 为一个正则表达式,字段名符合这个正则表达式的字段将被定义为纯数据字段

Component({
  options:{
    pureDataPattern:/^_/
  },
  data:{
    a:true,//普通数据字段
    _b:true//纯数据字段
  }
})
1
2
3
4
5
6
7
8
9

# 生命周期函数

生命周期函数 参数 说明
created 无 组件实例刚刚被创建时执行
attached 无 在组件实例进入页面节点树时执行
ready 无 在组件视图层布局完成后执行
moved 无 在组件实例被移动到节点树另一个位置时执行
detached 无 在组件实例被页面节点树移除时执行
error Object Error 每当组件方法抛出错误时执行

组件实例刚刚被创建好的时候,created 生命周期函数会被触发

  • 此时还不能调用 setData
  • 通常在这个生命周期函数中,只应该用于给组件的 this 添加一些自定义的字段

在组件完全初始化完毕、进入页面节点树后,acctached 生命周期函数会被触发

  • 此时,this.data 已被初始化完毕
  • 这个生命周期中,绝大多数初始化工作可以在此完成(例如发送网络请求获取数据)

在组件离开页面节点树后,detached 生命周期函数会被触发

  • 退出一个页面时,会触发页面内每个自定义组件的 detached 生命周期函数
  • 这个生命周期中,适合做一些清理性质的工作

# lifetimes

在小程序组件中,生命周期函数可以直接定义在 Component 构造器中,但是更加推荐定义在新的 lifetimes 节点中进行声明

Component({
 lifetimes:{
   attached(){},
   detached(){}
 }
})
1
2
3
4
5
6

# 所在页面的生命周期

有时,自定义组件的行为依赖于页面状态的变化,此时就需要用到组件所在页面的生命周期

生命周期函数 参数 描述
show 无 组件所在的页面被展示时执行
hide 无 组件所在的页面被隐藏时执行
resize Object Size 组件所在的页面尺寸变化时执行

# pageLifetimes

Component({
 pageLifetimes:{
   show:funciton(){},
   hide:function(){},
   resize:function(size){}
 }
})
1
2
3
4
5
6
7

# 插槽

在自定义组件的 wxml 结构中,可以提供一个 <slot> 节点,用来承载组件使用者的 wxml 结构

基本使用

<view>
	<view>组件自带结构</view>
  <slot></slot>
</view>
1
2
3
4
<demo>
	<view>外部插槽的使用</view>
</demo>
1
2
3

# 多插槽使用

在配置属性中启用多插槽

Component({
  options:{
    multipleSlots:true  //启用多 slot 支持
  }
})
1
2
3
4
5

基本使用

<view>
	<view>组件自带结构1</view>
  <slot name="before"></slot>
  <view>组件自带结构2</view>
  <slot name="after"></slot>
</view>
1
2
3
4
5
6
<demo>
	<view slot="before">插槽内容1</view>
  <view slot="after">插槽内容2</view>
</demo>
1
2
3
4

# 父子组件通信

三种方式

  1. 属性绑定 - 用于父组件向子组件的指定属性设置数据,仅能设置 JSON 兼容的数据
  2. 事件绑定 - 用于子组件向父组件传递数据,可以传递任意数据
  3. 获取组件实例 - 父组件可以通过 this.selectComponent() 获取子组件实例对象

# 属性绑定

父组件

<demo count="{{count}}"></demo>
1

子组件

properties:{
  count:Number
}
1
2
3

# 事件绑定

事件绑定用于实现子向父传值,可以传递任何类型的数据

  1. 在父组件的 js 中,定义一个函数,这个函数即将通过自定义事件的形式,传递给子组件
  2. 在父组件 wxml 中,通过自定义事件的形式,将步骤 1 中定义的函数引用,传递给子组件
  3. 在子组件的 js 中, 通过调用 this.triggerEvent('事件名称',{参数对象}) ,将数据发送到子组件
  4. 在父组件的 js 中, 通过 e.detail 获取到子组件传递过来的数据

父组件

syncCount(e){
  this.setData({
    count:e.detail.value
  })
}

=============== wxml文件 ===========================
<demo count="{{count}}" bind:sync="syncCount"></demo>
1
2
3
4
5
6
7
8

子组件

methods:{
  addCount(){
    this.setData({
      count:this.properties.count+1
    })
    this.triggerEvent('sync',{value:this.properties.count})
  }
}
1
2
3
4
5
6
7
8

# selectComponent

可以使用 id或class 选择器,获取到子组件的实例对象,从而直接访问子组件的数据和方法

<demo count="{{count}}" bind:sync="syncCount" class="y"></demo>
<button bindtap="getChild">按钮</button>

getChild(){
  const child = this.selectComponent('.y')
  child.addCount()//直接调用子组件的方法
}
1
2
3
4
5
6
7

# behaviors

behaviors 是小程序中,用于实现组件间代码共享的特性

每个 behavior 可以包含一组属性、数据、生命周期函数和方法 . 组件使用它时,它的属性、数据和方法会被合并到组件中

可用节点 类型 描述
properties Object Map 属性
data Object 数据
methods Object 方法
behaviors String Array 引入其它的behavior
created Function 生命周期函数
attached Function 生命周期函数
ready Function 生命周期函数
moved Function 生命周期函数
detached Function 生命周期函数

基本使用

  1. 定义一个behavior
module.exports = Behavior({
  data:{
    username:'yuadh'
  },
  properties:{},
  methods:{}
})
1
2
3
4
5
6
7
  1. 组件中导入使用
const myBehavior = require("../../behaviors/myBehavior")
Component({
  behaviors:[myBehavior]
})
====== wxml =========
<view>{{username}}</view>
1
2
3
4
5
6

字段冲突

参考官方文档:https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/behaviors.html

编辑 (opens new window)
上次更新: 2023/02/07, 14:51:48
页面
外部资源

← 页面 外部资源→

Theme by Vdoing | Copyright © 2021-2023 yuadh
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×