小程序开发

小程序的起步

MP-01

一.小程序简介

1.小程序和与普通网页的区别

运行环境不同:网页运行在浏览器中,小程序运行在微信环境中

API不同:运行环境不同,所有小程序中,无法调用DOM和BOM的API,可以调用微信环境提供的各种API;例如:地理定位,扫码,支付。

开发模式不同:网页:浏览器+代码编辑器;小程序:申请一个小程序的开发账号—安装开发者工具—创建和配置小程序的项目

二.第一个小程序

个人账号不支持微信字符,微信认证及一些高级接口的功能!

查看AppID的网址:https://mp.weixin.qq.com/

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sEtF1BZG-1681393028083)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230405125915685.png)]

下载开发工具:微信开发者工具(稳定版 Stable Build)下载地址与更新日志 | 微信开放文档 (qq.com)

创建项目

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cCjDuVVD-1681393028084)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230405131501856.png)]

微信小程序开发者文档:微信开放文档 (qq.com)

1.了解项目结构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9ngdCvk3-1681393028084)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230407085019813.png)]

pages:存放所有小程序的页面

utils:存放所有工具性质的文件

app.js:小程序的入口文件

app.json:小程序项目的全局配置文件

app.wxss:小程序的全局样式文件

project.config.json:项目的配置文件

sitemap.json:用来配置小程序及其页面是否允许被微信索引

2.小程序页面的组成部分

小程序官方建议把所有的小程序页面,都成放在pages目录中,以单独的文件夹存在

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lZFwsu65-1681393028085)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230407085514127.png)]

.js文件:页面的脚本文件,存放页面的数据,时间处理函数等

.json文件:当前页面的配置文件,配置窗口的外观、表现等

.wxml文件:页面的模板结构文件

.wxss文件:页面的样式表文件

json配置文件的作用

JSON是一种数据格式,在实际的开发中,JSON总是以配置文件的形式出现。小程序项目中也不例外:通过不同的.json配置文件,可以对小程序项目进行不同级别的配置。

app.json

当前小程序的全局配置文件,包括小程序的所有页面路径,窗口外观,页面效果,底部tab等

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MmLGztMB-1681393028085)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230407090330859.png)]

pages:记录当前小程序所有页面的路径

window:全局定义小程序所有页面的背景色、文字颜色等

style:控制小程序的样式版本

sitemapLocation:用来指明sitemap.json的位置

project.config.json

项目配置文件,用来记录对小程序开发工具所做的个性化配置,可以修复appid

setting:中保存的是编译相关的配置

projectname:保存的是项目名称

appid:保存的是小程序的账号ID

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LEx0GVlf-1681393028085)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230407091001152.png)]

sitemap.json文件

微信小程序开放小程序内搜索,效果类似于PC网页中的SEO。sitemap.json文件用于配置小程序页面是否允许微信索引。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8L2kJCms-1681393028086)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230407091326985.png)]

关闭终端的黄色警告:“checkSiteMap”: false,

页面的.json配置文件

小程序的每一个页面,可以使用.json文件来对本页面的窗口外观进行配置,页面中的配置向会覆盖app.json的window中的相同配置项。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xqtT7j0Z-1681393028086)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230407092138789.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bsFR5Iid-1681393028086)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230407092152859.png)]

以index.json中的配置为准

三.小程序代码生成

1.新建小程序页面

在app.json -> pages中新增页面的存放路径,小程序开发者工具即可帮助我们自动创建对应的页面文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mpxUzyVA-1681393028086)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230407092452302.png)]

保存后自动生成

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-I0LkUTAX-1681393028087)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230407092511577.png)]

2.修改项目首页

调整app.json -> pages数组中页面路径的前后顺序,既可以修改项目的首页。小程序会把排在第一位的页面,当作项目首页进行渲染

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GC4WldKS-1681393028087)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230407092859835.png)]

3.WXML文件的作用

WXML是小程序框架设计的一套标签语言,用来构建小程序的页面结构,其作用类似于网页开发中的HTML

其与html的区别:标签名称不同,属性节点不同,提供了类似Vue中的模板语法

4.WXSS文件的作用

WXSS是一套样式语言,用于描述WXML组件样式,类似网页开发中的CSS。

与CSS的区别:

新增了rpx尺寸单位,在不同大小屏幕上自动进行大小的换算;

提供了全局样式app.wxss对所有的页面都有效果和局部样式:每个文件夹中的.wxss文件,支队当前页面生效;

WXSS仅支持部分选择器:.class 、#id、 element、 并集选择器、 后代选择器、::after和 ::before等伪类选择器

5.js文件的作用

app.js:是整个小程序项目的入口文件,通过App() 函数来启动整个小程序

页面的js文件:Page函数来创建并运行js文件

普通的js文件:普通的功能模块文件,用来封装公共属性或函数供页面使用

四.小程序的宿主环境

1.宿主环境

指的是程序运行时必须依赖的环境,安卓和IOS是两个不同的数组环境。安卓版程序是不能再IOS上运行的

小程序的宿主环境:微信本身,所有的能力都是由微信提供的

小程序宿主环境包含的内容
通信模型

分为两部分:渲染层和逻辑层之间的通信和逻辑层与第三方服务器之间的通信,都是由微信客户端进行转发

WXML模板和WXSS样式工作在渲染层,JS脚本工作在逻辑层。

运行机制
1.小程序启动过程

把小程序的代码包下载到本地,

解析app.json全局配置文件,

执行app.js小程序入口文件,调用App()创建小程序实例,

渲染小程序首页,

小程序启动完成

2.页面渲染过程

加载解析页面的.json配置文件,

加载页面的.wxml模板和.wxss样式,

执行页面的.js文件,调用Page()创建页面实例,

页面渲染完成。

组件

由宿主环境提供的,分为9大类

1.视图容器类组件:

view普通视图区域,类似HTML中div,是一个块级元素,常用来实现页面的布局效果

scoll-view可滚动的试图区域,常用来实现滚动列表的效果

swiper和swiper-item轮播图的容器组件和轮播图的item组件

swiper轮播图的常用属性

属性类型默认值说明
indicator-dotsBooleanfalse是否显示面板指示点
indicator-colorcolorrgba(0, 0, 0, .3)未被选中的指示点颜色
indicator-active-colorcolor#000000当前选中的指示点颜色
autoplaybooleanfalse是否自动切换
intervalnumber5000自动切换时间间隔
circularbooleanfalse是否采用衔接滑动

2.常用的举出内容组件

text文本组件,类似于HTML中span标签,是一个行内元素

rich-text富文本组件,支持把HTML字符串渲染为WXML结构

3.其他常用组件

button按钮组件,功能比HTML中的button按钮丰富,通过open-type属性可以调用微信蹄冻的各种功能

image图片组件,默认组件的宽为300px、高为240px; mode属性指定图片的裁剪缩放方式

mode值说明
scaleToFill默认的 缩放模式,不包吃纵横比缩放图片,是图片的宽高完全拉伸至填满image元素
aspectFit缩放模式,保持纵横比缩放图片,是图片的长边能完全显示出来,
aspectFill缩放模式,保持纵横比缩放图片,只保证图片的短边能完全显示出来。长边会被截掉
widthFix缩放模式,宽度不变高度自动变化,保持原图宽高比不变
heightFix缩放模式,高度不变,宽度自动变化,保持原图片宽高比不变

navigator(后面会讲)页面导航组件类似于HTML中的a链接

API

小程序中的API是由宿主环境提供的,通过这些丰富的小程序API,开发者可以方便的调用微信提供的能力,获取用户信息,本地储存,支付功能等!

分为三大类:

事件监听API:以on开头,用来监听某些事件的触发

同步API:以Sync结尾的API都是同步API,同步API的执行结果,可以通过函数返回值直接获取,如果执行出错会抛出异常

异步API:类似jQuery中的$.ajax(options)函数,需要通过success、fail、complete接收调用的结果

五.协同工作和发布

1.了解权限管理

针对不同岗位、不同角色的员工的权限进行边界的划分,高效协同的工作

项目人员的组成:项目管理者,产品组,设计组,开发组,测试组

2.小程序的开发流程

提出要求(产品组)—设计(设计组)—开发(开发组)—体验(产品组,设计组)—测试(测试组)—发布(管理者)

3.成员管理的两个方面

小程序成员管理体现在管理员对小程序项目成员及体验成员的管理:

项目成员:参加小程序的开发、运营成员、登陆小程序管理后台、管理员可以添加、删除项目成员并设置项目成员的角色

体验成员:参加小程序内测体验的成员,可以使用体验版小程序,但不属于项目成员,管理员及项目成员均可以添加、删除体验成员

4.开发者权限说明

开发者权限:可以使用小程序开发者工具及对小程序的功能进行代码开发

体验者权限:可以使用体验版小程序

登陆权限:可登录小程序管理后台,无须管理员确认

开发权限:设置小程序服务器域名、消息推送及扫描普通链接二维码打开小程序

腾讯云管理:云开发相关设置

添加项目成员和体验成员

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-izdCzLsj-1681393028087)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230407203921218.png)]

5.小程序版本

开发版本—开发者编写代码的同时,对项目代码进行自测

体验版本—可以选择某个开发版本作为体验,并选取一份体验版

审核中版本—只能有一份代码处于审核中,通过可以发布到线上

线上版本—线上所有用户使用的版本,该版本在新版本代码发布后被覆盖更新

6.发布上线

一般要经过上传代码—提交审核—发布

上传代码

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LWYD6TQ5-1681393028088)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230407204801057.png)]

版本管理

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-N3Azqkbo-1681393028088)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230407204819505.png)]

设置小程序的基本信息

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wAEvtX7r-1681393028088)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230407205006588.png)]

查看运营数据

1.在小程序后台查看

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hxlZNyHd-1681393028089)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230407205101605.png)]

2.使用小程序数据助手

微信公众号搜索-小程序数据助手!

小程序-模板与配置

MP-02

一.WXML模板语法

1.数据绑定的基本原则

在data中定义数据

在页面对应的.js文件中,把数据定义到data对象中即可

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sJrltuKV-1681393028089)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230407211554804.png)]

在WXML中使用数据

想使用的时候使用 {{}} (Mustache语法)将变量包起来即可

Mustache语法主要应用场景:绑定内容、绑定属性、运算(三元运算、算数运算)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-g0F8KHYy-1681393028089)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230408132732190.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MSecH7r9-1681393028089)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230408132720645.png)]

2.事件绑定

事件是渲染成到逻辑层的通讯方式。通过事件可以将用户在渲染层产生的行为,反馈到逻辑层进行业务的处理

常用的事件
类型绑定方式事件描述
tapbindtap 或 bind:tap手指触摸后马上离开,类似于HTML中的click事件
inputbindinput 或 bind:input文本框的输入事件
changebindchange 或 bind:change状态改变时触发
事件的属性列表
属性类型说明
typeString事件类型
timeStampInteger页面打开到触发事件所经历的毫秒数
targetObject触发事件的组件的一些属性值集合
currentTargetObject当前组件的一些属性值集合
detailObject额外的信息
touchesArray触摸事件,当前停留在屏幕中的触摸点信息的数组
changedTouchesArray触摸事件,当前变化的触摸点信息的数组

target于currentTarget的区别:前者是触发该事件的源头组件,而currentTarget是当前事件绑定的组件。

例子:点击内部按钮时,点击事件以冒泡的方式向外扩散,也会触发外层的view的tap事件处理函数,

e.target指向的是触发事件的源头组件,指向内部按钮

e.currentTarget指向的是当前正在触发事件的那个组件,指向外部view组件

bindtap的语法格式

在小程序中不存在HTML中的onclick鼠标点击事件。而是通过tap事件来响应用户的触摸行为的。

通过bindtap,可以为组件绑定tap触摸事件,

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xPRbXPjC-1681393028090)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230408140252452.png)]

在页面的.js文件中对应的事件处理函数(与data平级),事件参数通过形成event(一般简写为e)来接收

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KIa7yOQu-1681393028090)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230408140302846.png)]

在事件处理函数中为data中的数据赋值

通过按钮点击触发countChange事件

通过调用this.setData(dataObject)方法,可以给页面data中的数据重新赋值

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VNnBOCZB-1681393028090)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230408141042637.png)]

事件传参

不可以直接在括号中写,这样的写法会被当作事件的名字。data-*="{{#}}"用这个进行传参, * 号代表的是参数的名字, # 号代表的是参数的值

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qYbPTyKh-1681393028090)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230408141630305.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2V9liivj-1681393028091)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230408141647431.png)]

bindInput的语法格式

在小程序中,通过input事件来响应文本框的输入事件,获得文本框的数据

通过bindinput,可以为文本框绑定输入事件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ckYLeJdG-1681393028091)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230408143048388.png)]

在页面的.js文件中定义事件处理函数,e.detail.value文本框中的最新的值

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dR6c17vW-1681393028091)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230408143016488.png)]

实现文本框和data之间的数据同步

实现步骤:

定义数据

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Dc2056hr-1681393028092)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230408150635374.png)]

渲染结构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OI9641bB-1681393028092)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230408150616114.png)]

美化样式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zWV5EecN-1681393028092)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230408150546007.png)]

绑定input事件处理函数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-El1aTc7g-1681393028093)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230408150557919.png)]

3.条件渲染

wx:if

wx:elif

wx:else 不需要判断条件

在小程序中,使用wx:if="{{condition}}"来判断是否需要渲染该代码块

wx:if与block标签联合使用

如果想要一次性控制多个组件的展示与隐藏,可以使用一个block标签将多个组件包装起来,并在block标签上使用wx:if控制属性;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-w0fmbsRl-1681393028093)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230408151759696.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q52Bu7TY-1681393028093)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230408151814681.png)]

hidden

在小程序中,直接使用hidden="{{}}"也可以控制小程序的隐藏与显示

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wZDD0RXE-1681393028093)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230408152050911.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TjybNJT8-1681393028094)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230408152106247.png)]

wx:if与hidden的对比

运行方式不同

wx:if以动态创建和移除元素的方式,控制元素的展示与隐藏,条件为true显示元素,为false隐藏元素

hidden以切换的方式(diaplay: none/block),控制元素的显示false与隐藏true

使用建议:频繁切换时,使用hidden。控制条件复杂的时候建议使用wx:if搭配wx:elif、wx:else进行展示与隐藏的切换

4.列表渲染

wx:for

可以通过指定的数组,循环渲染重复的组件结构,当前索引用index表示,项用item表示

了解:用属性wx:for-index=“指定名字”;用属性wx:for-item=“指定名字”。作为名字的替换

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bSmAWkQ1-1681393028094)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230408153149179.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ItOBFEoG-1681393028094)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230408153203817.png)]

wx:key

指定唯一的key值能够提高渲染效率!

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Hfr99Mx4-1681393028096)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230408154429202.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JfzHwD40-1681393028096)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230408154514295.png)]

二.WXSS模板样式

1.概述

WXSS是一套样式语言,用于美化WXML的组件样式,类似网页中的CSS

与css的关系:WXSS具有CSS大部分特性,同时WXSS还对CSS进行了扩充以及修改,以适应微信小程序的开发

扩展的特性有:rpx尺寸单位 @import样式导入

2.rpx尺寸单位

rpx是微信小程序独有的,用来解决屏适配的尺寸单位。实现原理:鉴于不同的设备屏幕大小,为了实现屏幕的自动适配,rpx把所有的设备屏幕等分为750份。所以在小屏幕的设备上1rpx代表的宽度较小,在大屏幕的设备上1rpx代表的宽度较大。

小程序在不同设备三运行的时候会自动把rpx的样式单位转换为对应的县属单位来渲染从而实现屏幕适配

rpx与px之间的单位换算

在iPhone6 1rpx = 0.5px

1rpx = 屏幕宽度像素值/750px( 建议使用iPhone6作为标准视觉)

3.@import样式导入

在@import后面写要外链的相对路径,用;表示语句的结束。这个引入的样式会作用在当前组件内!

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-X4DDdliA-1681393028096)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230408180104585.png)]

4.全局样式和局部样式

全局样式:定义在app.wxss中的样式为全局样式,作用于每个页面。

局部样式:在页面的.wxss文件中定义的样式为局部样式,最作用当前页面。

注意:当局部央视与全局样式冲突时,根据就近原则,局部样式会覆盖全局样式,当局部样式的权重大于或等于全局样式的权重时,才会覆盖全局样式

三.全局配置

1.全局配置文件及常用的配置项

小程序根目录下的app.json文件是小程序的全局配置文件。常用的配置如下:

pages:记录当前小程序所有的页面的存放路径

window:全局设置小程序窗口的外观,

tabBar:设置小程序底部的tabBar效果

style:是否启用新版的组件样式,新版-v2

2.window

小程序窗口的组成部分

导航栏区域和背景区域可以通过window来进行相关的配置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PKNdR7Pl-1681393028097)(D:\桌面\前端\笔记的图片\3da54e3d9575bcafdb33e9d4cc5c5db3.jpg)]

window中常用的配置项
属性名类型默认值说明
navigationBarTitleTextString字符串导航栏标题文字内容
navigationBarBackgroundColorHexColor#000000导航栏背景颜色,仅支持16进制的
navigationBarTextStyleHexColorwhite导航栏标题颜色
backgroundColorHexColor#ffffff下拉刷新 窗口的背景颜色,仅支持16进制的
backgroundTextStyleStringdark下拉loading的样式,仅支持dark/light
enablePullDownRefreshBooleanfalse是否全局开启下拉刷新,会作用每个小程序页面
onReachBottomDistanceNumber50页面上拉触底事件触发时距离页面底部距离,单位px(不建议修改)

3.tabBar

tabBar是移动端应用常见的页面效果,用于实现多页面的快速切换;分为两种:底部tabBar和顶部tabBar

注意:只能配置至少两个最多五个tab页签;当渲染顶部tabBar时,不显示icon,只显示文本

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lmO21nxn-1681393028097)(D:\桌面\前端\笔记的图片\IMG_1193.PNG.JPG)]

tabBar节点配置项
属性类型默认值描述
positionStringbottomtabBar的位置,仅支持bottom/top
borderStyleStringblacktabBar上边框的颜色,仅支持black/white
colorHexColortab上文字的默认(未选中)颜色
selectedColorHexColortab上文字选中时的颜色
backgroundColorHexColortabBar的背景色
list(必填项,其他都是选填项)Arraytab页签列表,最少两个、最多五个
每个tab项的配置选项
属性类型必填描述
pagePathString页面路径,页面必须在pages中预先定义,直接使用page就可以
textStringtab上显示的文字
iconPathString未选中的图片路径;当postion为top时,不显示icon
selectedIconPathString选中时的图片路径,当postion为top时,不显示icon

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nTQwk5jq-1681393028097)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230409095344370.png)]

四.页面配置

小程序中,每个页面都有自己的.json配置文件,用来针对当前页面的窗口外观、页面效果等进行配置。

1.页面配置和全局配置的关系

小程序中,app.json中的window节点。可以全局配置小程序中每个页面的窗口表现形式。

某些小程序页面想要自己独特的窗口表现,此时页面级别的.json配置文件,可以实现这种要求。

注意:页面配置与全局配置冲突时,会以页面配置为准

2.页面配置中常用的配置项

属性类型默认值描述
navigationBarBackgroundColorHexColor#000000当前页面导航栏背景颜色,如#000000
navigationbarTextStyleStringwhite当前页面导航栏标题颜色,仅支持dark/light
navigationBarTitleTextString当前页面导航栏标题文字内容
backgroundColordark#ffffff当前页面窗口的背景色
backgroundTextStyleStringdark当前页面下拉loading的样式,仅支持dark/light
enablePullDownRefreshBooleanfalse是否为当前页面开启下拉刷新效果
onReachBottomDistanceNumber50页面上拉触底事件触发时距页面底部的距离

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-H3SYGdzs-1681393028098)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230409101922186.png)]

五.网络数据请求

1.小程序中网络数据请求的限制

安全考虑,小程序官方对数据接口请求做出两个限制:只能在HTTPS类型的接口,必须将接口的域名添加到信任列表中。

2.配置request合法域名

配置步骤:登录微信小程序管理后台—开发—开发设置—服务器域名—修改request合法域名

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-c74A7PiO-1681393028098)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230409103442977.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XSbIoeI9-1681393028098)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230409103419128.png)]

注意事项:域名只支持https协议;域名不能使用IP地址或localhost;域名必须经过ICP备案;服务器域名一个月最多可以申请5次修改

3.发起GET请求

调用微信小程序提供的wx.request()方法,可以发起GET数据请求,域名必须配置进 request合法域名中。请求的真正数据是res.data

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-U2k0Rsm9-1681393028098)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230409110115086.png)]

4.发起的POST请求

调用微信小程序提供的wx.request()方法,可以发起POST数据请求,域名必须配置进 request合法域名中。请求的真正数据是res.data。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hUogBVp6-1681393028099)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230409110643262.png)]

5.在页面刚加载时请求数据

在onload事件中调用获取数据的函数,this.方法名(),调用函数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2C6NK0Bv-1681393028099)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230409110911930.png)]

6.关于跨域和Ajax的说明

跨域问题只存在于基于浏览器的Web开发中。由小程序的宿主环境不是浏览器,而是微信客户端,所以小程序中不存在跨域问题

Ajax技术也是依赖于浏览器中的XMLHttpRequest这个对象,由于小程序的数组环境是微信客户端,所以小程序不能叫做发送"Ajax请求",而是叫做发送"发起网络数据请求"。

注意事项

1.请求的接口必须在详情页中定义声明!!

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FXc6MyGh-1681393028099)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230409111010201.png)]

2.跳过https合法域名校验,但是只能在开发和测试阶段使用!!

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jvzEirbR-1681393028100)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230409111154888.png)]

六.案例-本地生活(首页)

Local_Life文件夹

小程序-视图与逻辑

mp-03

一.页面导航

1.概述

页面导航指的是页面之间的相互跳转。实现方式有两种:声明式导航和编程式导航

声明式导航:在页面上声明一个navigator导航组件,通过点击navigatior组件实现页面跳转
编程式导航:调用小程序的导航API,实现页面跳转

2.声明式导航

导航到tabBar页面

tabBar页面指的是被配置为tabBar的页面,在使用navigator标签组件跳转到指定的tabBar页面时,需要指定url属性和open-type属性

url-表示要跳转的页面的地址,必须以 / 开头

open-type表示跳转的方式,必须为switchTab;否则不能实现跳转

导航到非tabBar页面

在使用navigator组件跳转到普通的非tabBar页面时,则需要指定url属性和open-type属性,其中:

url-表示要跳转的页面的地址,必须以 / 开头

open-type表示跳转的方式,必须为navigate;可以省略

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lrBNXZ2b-1681393028100)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230409202136585.png)]

后退导航

如果后退到上一个页面或多级页面,则指定open-type属性和delta属性,其中:

open-type的值必须是navigateBack,表示要进行后退导航

delta的值必须是数字,表示要后退的层级

注意简化书写可以省略delta属性,因为其默认值就是1

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EF6tVcxL-1681393028100)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230409202113605.png)]

3.编程式导航

调用wx.switchTab(Object object)方法,可以跳转到tabBar页面。其中Object参数对象的属性列表如下:

属性类型是否必选说明
urlstring需要跳转到的tabBar页面路径,路径后不能那个带参数
successfunction接口调用成功的回调函数
failfunction接口调用失败的回调函数
completefunction接口调用结束的回调函数(调用成功/失败都会执行)

调用wx.navigateTo(Object object)方法,可以跳转到非tabBar页面。其中Object参数对象的属性列表如下:

属性类型是否必选说明
urlstring需要跳转到的非tabBar页面路径,路径后可以带参数
successfunction接口调用成功的回调函数
failfunction接口调用失败的回调函数
completefunction接口调用结束的回调函数(调用成功/失败都会执行)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ESbRtz3c-1681393028101)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230409201237704.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RnUYhGK7-1681393028101)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230409201222353.png)]

调用wx.navigateBack(Object object)方法,可以返回上一页或多级页面。其中Object参数对象的属性列表如下:

属性类型默认值说明
url 必填项string1需要跳转到的非tabBar页面路径,路径后可以带参数
successfunction接口调用成功的回调函数
failfunction接口调用失败的回调函数
completefunction接口调用结束的回调函数(调用成功/失败都会执行)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xSB0PSq5-1681393028101)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230409202059614.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jQCOiC3l-1681393028101)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230409202049319.png)]

4.声明式导航传参

navigator组件的url属性用来指定要跳转到的页面的路径。同时,路径的后面还可以携带参数:

参数与路径之间使用?分隔;参数键与参数值用=链接;不同参数用&分隔。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GWkqJGhH-1681393028102)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230409202346906.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0jEdXgvQ-1681393028102)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230409202427531.png)]

5.编程式导航传参

调用wx.navigateTo(Object onject)方法跳转页面时。也可以携带参数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Wh4aLJ0H-1681393028102)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230409203244880.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IfLYRMem-1681393028103)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230409203305121.png)]

6.在onload中接收导航参数

提交到的页面的js文件!

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nRskbuAA-1681393028103)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230409203920970.png)]

二.页面事件

1.下拉刷新

是移动端的专有名字,指通过手指在屏幕上的下拉滑动操作,从而重新加载页面数据

开启下拉刷新分为全局开启下拉刷新和局部开启下拉刷新:都是在对应的.json文件中添加enablePullDownRefresh设置为true

在实际开发中一般都是为需要的页面单独开启下拉刷新的效果

监听页面的下拉刷新事件:在对应页面的.js文件中,通过onPullDownRefresh()函数即可监听当前页面的下拉刷新事件

停止下拉刷新的效果:wx.stopPullDownRefresh()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-55lCMOON-1681393028103)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230410101323083.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bxXTq59L-1681393028103)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230410101509906.png)]

2.上拉触底事件

是移动端的专有名词,通过手指在屏幕上的上拉滑动操作,从而加载更多数据的行为。

监听页面上拉触底事件:在页面的.js文件中,通过onReachBottom()函数就可以监听页面的上拉触底事件

上拉触底的距离:在触发上拉触底事件时,滚动条距离页面底部的距离,可以在全局或页面的.json配置文件中,通过onReachBottomDistance属性来配置上拉触底的距离,默认是50px。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ajygLEUl-1681393028104)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230410102924347.png)]

上拉触底事件,得进行节流的判断isloading

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-c0svUoCt-1681393028104)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230410105749914.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QwIqS4iU-1681393028104)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230410105956651.png)]

3.自定义编译模式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Yfw5NXlN-1681393028105)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230410110523290.png)]

可以传参,提升开发效率

三.生命周期

1.概述

生命周期是指一个对象从创建-运行-销毁的整个阶段,强调的是一个时间段

分为:应用生命周期(小程序的启动-运行-销毁)和页面生命周期(每个页面的加载-渲染-销毁的过程);页面生命周期范围较小,应用程序的生命周期范围较大

2.生命周期函数

生命周期函数:是由小程序框架提供的内置函数,会伴随生命周期,自动按次执行。

作用:运行程序员在特定的时间点,执行某些特定的操作。例如,页面刚加载时,用onload函数加载页面初始化数据。

注意:生命周期强调时间段,生命周期函数强调的是时间点

分类:应用的生命周期函数(小程序从启动到运行到销毁期间依次调用的那些函数)和页面的生命周期函数(每个小程序中每个页面从加载-渲染-销毁期间依次调用的那些函数)

应用生命周期函数

小程序的应用生命周期需要在app.js中进行声明

onLaunch函数:当小程序初始化完成时,会触发(全局只触发一次)

onShow函数:当小程序启动,或从后台进入前台显示,会触发

onHide函数:当小程序从前台进入后台,会触发

PS:前台:处于小程序运行界面上就是前台状态。后台:处于小程序以外的界面上,此时小程序叫处于后台

页面生命周期函数

小程序的页面生命周期函数需要在页面的.js文件中进行声明

onLoad(options):生命周期函数–监听页面加载,获取数据/转存参数,只会调用一次*

onReady() :生命周期函数–监听页面初次渲染完成。只会调用一次,可以修改一些样式*

onShow():生命周期函数–监听页面显示

onHide():生命周期函数–监听页面隐藏

onUnload():生命周期函数–监听页面卸载,只会触发一次

四.WXS脚本

1.概述

WXS是小程序中独有的一套脚本语言,可以构建出页面的结构

应用场景:wxml中无法调用在页面的.js中定义的函数,但是,wxml中可以调用wxs中定义的函数。因此小程序中wxs的典型应用场景就是过滤器(在渲染数据之前对数据进行包装与处理,最终渲染到页面上)

2.wxs和JavaScript的关系

虽然说wxs的语法类似于JavaScript,但是wxs和JavaScript是两种完全不同的语言:

wxs有自己的数据类型

number数值类型、string字符串类型、boolean布尔类型、object对象类型、function函数类型、array数组类型、date日期类型、regexp类型

wxs不支持类似于ES6以及以上的语法形式

不支持:let、const、解构赋值、展开运算符、箭头函数、对象属性简写、etc

支持:var定义变量、普通function函数等类似ES5的语法

wxs遵循CommonJS规范

module对象、require()函数、module.exports对象

3.内嵌wxs脚本

wxs代码可以编写在wxml文件中wxs标签内(类似script标签中写JavaScript)

wxml文件中每个wxs标签,必须提供module属性,用来指定当前wxs的模板名称,方便在wxml中访问模块中的成员

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5DVcWp6c-1681393028105)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230410133356607.png)]

4.定义外联的wxs脚本

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TAJ50opV-1681393028105)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230410133718099.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Tm2VXekb-1681393028105)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230410134025348.png)]

5.wxs的特点

与JavaScript不同,wxs只是大量借鉴了JS的语法;

不能作为组件的事件回调,wxs典型的应用场景就是”过滤器“,经常配合Mustache语法{{}}进行使用;

隔离性,wxs的运行环境和其他的JavaScript代码是隔离的,体现在wxs不能调用js中定义的函数,wxs不能调用小程序提供的API;

性能好,在IOS设备上,小程序内的WXS会比JavaScript代码快2-20倍,安卓上二者运行效率无差异

五.案例本地生活(列表页)

Local_Life文件shoplist

小程序-基础加强

mp-04

一.自定义组件

1.组件的创建

在项目的根目录中创建一个components文件夹中,创建名为test文件夹;

在新键的est文件夹上,鼠标右键,点击新建Component;

输入组件的名称之后回车,会自动生成组件对应的4各文件,后缀名分别是:.js .json .wxml和.wxss

注意:为了保证目录结构的倾斜,建议把不同的组件,存放在单独的目录中

2.引用组件

引用方式分为:局部引用和全局引用

局部引用

组件只能在当前被引用的页面内使用,少量使用的组件用局部引用

在页面的.json配置文件中引用组件的方式,叫做局部应用。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TkbqVyp7-1681393028106)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230411145429908.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KpuBnktH-1681393028106)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230411145520826.png)]

全局引用

组件可以在每个小程序页面中使用,常用的组件用全局引用

在app.json全局配置文件中引用组件的方式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AZ0KXNTF-1681393028106)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230411150002093.png)]

3.组件和页面的区别

从表面来看,组件和页面都是由.js .json .wxml和.wxss组成的。但是组件和页面的.js文件和.json文件有明显不同。

组件的.json文件中需要声明"component": true属性,页面上面有

组件的.js文件中调用的是Component()函数,页面是Page()函数

组件的事件处理函数需要定义到methods节点中声明,页面的事件处理函数定义在与data平级就行

4.组件样式隔离

默认情况下,自定义组件的样式只对当前组件生效,不会影响到组件之外的UI结构;

这样可以防止外界影响组件内部的样式,也防止了组件的样式破坏外界的样式

注意:全局的app.wxss中对组件中的样式无效;只有class选择器会有样式隔离的效果,id选择器,属性选择器,标签选择器不受样式隔离的影响,所以尽量使用class选择器

修改组件样式隔离选项

通过修改styleIsolation修改组件的样式隔离选项

styleIsolation的可选值:

可选值默认值描述
islated启用样式隔离,在自定义组件外,使用class指定的样式将不会相互影响
apply-shared表示页面wxss样式影响到自定义组件,但自定义组件wxss中指定的样式不会影响到页面
shared用的多一点;表示页面wxss样式将影响到自定义组件,自定义组件wxss中指定的样式也会影响页面和其他设置了apply-shared或shared的自定义组件

5.数据、方法和属性

data数据

在小程序中,用于组件模板渲染的私有数据,需要定义到data节点下

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6DPfKCyT-1681393028107)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230411154001033.png)]

method方法

在小程序组件中,事件处理函数和自定义方法需要定义到methods节点中

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4NXKkxZy-1681393028107)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230411154746093.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AKSqMG5t-1681393028107)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230411154730000.png)]

properties属性

在小程序组件中,properties是组件的对外属性,用来接收外界传递到组件中的数据

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hfq20rVz-1681393028107)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230411160312995.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lAlOKHbb-1681393028108)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230411160352889.png)]

data与properties的区别

在小程序中properties和data数据用法相同,都是可读可写的;

只不过data更倾向于存储组件的私有数据,properties倾向于储存外界传递到组件中的数据

使用setData修改properties的值

由于data数据和properties属性在本质上没有任何区别,因此properties属性的值也可以用于页面渲染,或使用setData为properties中的属性重新赋值

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zPASpM4J-1681393028108)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230411161602246.png)]

6.数据监听器-observers

observers数据监听器用于监听和响应任何属性和数据字段的变化,从而执行特定的操作。类似于vue中的watch监听器

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OyqCFNmx-1681393028108)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230411191035762.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xXOKiOhE-1681393028109)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230411191015581.png)]

监听对象属性的变化

数据监听器支持监听多个或单个属性的变化

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NzY1scpg-1681393028109)(D:\桌面\前端\笔记的图片\b71aa5e6bbccf0b4c715a5c5e15b7dc9.jpg)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qaXyIaDq-1681393028109)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230411211537809.png)]

7.纯数据字段

指的是那些不用于界面渲染的data字段

应用场景:某些data中的字段既不会展示在页面上,也不会传递给其他组件,仅仅在当前组件内使用。具有这种特征的data字段适合被叫做纯数字字段。

好处:提升页面性能

使用规则

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q9eeq3hf-1681393028110)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230411212829366.png)]

8.组件的生命周期

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

分别是created、attached、detached;

created函数,组件刚被创建好的适合触发,不能调用setData;通常在这个生命周期中,只给组件的this添加一些自定义的属性字段

attached函数,完全初始化完毕、进入节点树后,会被触发;this.data已被初始化完毕,最常用

detached函数,组件离开组件树/被销毁的时候,会被触发;适合做一些清理性质的工作

lifetimes节点

可以与data节点平级定义生命周期函数,也可以在lifetimes节点(与data平级)中定义生命周期函数;后面的是新方式,当与旧方式冲突时以新方式为准!

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6wXdiHrl-1681393028110)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230411220310016.png)]

9.组件所在页面的生命周期

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

组件所在页面的生命周期函数:

生命周期函数参数说明
show组件所在的页面被展示时执行
hide组件所在的页面被隐藏时执行
resizeObject Size组件所在的页面尺寸变化时执行
pageLifetimes节点

组件所在页面的生命周期函数,需要定义在pageLifetimes节点中

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wVojngK4-1681393028110)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230411220549940.png)]

10.插槽

在自定义组件中的wxml结构中,可以提供一个slot节点(插槽),用于承担组件使用者提供的wxml

外界可以对插槽上的数据进行定义!

单个插槽

在小程序中,默认每个组件中只允许使用一个slot进行占位,这种限制叫做单个插槽

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-13XzlXVT-1681393028110)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230412085258897.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dtPLkhvF-1681393028111)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230412085323427.png)]

多个插槽

使用多个插槽时,可以在组件的.js文件中,进行配置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-alLU1oii-1681393028111)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230412085531492.png)]

多个不同的插槽用name属性进行区分

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8cv26t2u-1681393028111)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230412085837393.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9tFbK4h9-1681393028111)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230412085816440.png)]

11.父子组件之间的通信

属性绑定

用于父组件向子组件的指定属性设置数据,仅能设置JSON兼容的数据;用于实现父向子传值,且只能传递普通类型数据,无法传递方法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Vnv1nvSS-1681393028112)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230412091301813.png)]

事件绑定

用于子组件向父组件传递数据,可以传递任意数据;实现子向父传值。

步骤

1.在父组件的js中,定义一个函数,这个函数通过自定义事件的形式,传递给子组件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9So7yU7d-1681393028112)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230412092711600.png)]

2.在父组件的wxml中,通过自定义事件的形式,将上一步中的定义的函数引用,传递给子组件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7VEZuY9J-1681393028112)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230412092735349.png)]

3.在子组件的js中,通过调用this.triggerEvent(‘自定义事件名称’, {参数对象}),将数据发送到父组件中

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m3dMc1yu-1681393028113)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230412092835224.png)]

4.在父组件的js中,通过e.detail获取到子组件传递过来的数据

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NpCGV6zR-1681393028113)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230412092902504.png)]

获取组件实例

父组件还可以this.selectComponent()获取子组件实例对象;这样可以直接访问子组件的任意数据和方法;调用的时候传递一个选择器,例如this.selectComponent(“.my-component”)。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hgAktjS7-1681393028113)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230412095411498.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vpCiLaE4-1681393028114)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230412095504742.png)]

12.自定义组件-behaviors

behaviors用于实现组件之间的代码共享的特性,类似于Vue.js中的 mixins

每个behaviors可以包含一组属性、数据、生命周期函数和方法。组件引用他们时,它是属性、数据和方法会被合并到组件中。

每个组件可以引用多个behaviors,behaviors也可以引用其他behaviors

创建behaviors

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OvYNx49t-1681393028114)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230412100954015.png)]

导入并使用behavior

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pq2E9zxw-1681393028114)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230412101312478.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Gf4pzlqn-1681393028114)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230412101322078.png)]

behavior可用节点
可用节点类型是否必填描述
properties*Object Map同组件属性
data*Object同组件数据
methods*Object同自定义组件的方法
behaviors*String Array引入其他的behavior
createdFunction生命周期函数
attachedFunction生命周期函数
readyFunction生命周期函数
movedFunction生命周期函数
detachedFunction生命周期函数
同名字段的覆盖和组合规则

组件和它引用的behavior中可以包含同名字段,冲突时参考以下规则(参考文档):

同名的数据字段(data)

同名的属性(properties)或方法(methods)

同名的生命周期函数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1q96TZlq-1681393028115)(D:\桌面\前端\笔记的图片\lADPKEX55EzMATHNAuPNBRQ_1300_739.jpg)]

二.使用npm包

目前小程序已经支持使用npm安装第三方包,提高开发效率;有三个限制:

不支持依赖于node.js内置库的包;不支持依赖于浏览器内置对象的包;不支持依赖于c++插件的包。

因为这三个限制所以能提供给小程序使用的包很少!

1.Vant Weapp

是一个前端团队开发出来的一套小程序UI组件库,阻力快速搭建小程序应用,使用MIT开源协议,对商业使用比较友好。

安装步骤:在项目目录下新建一个package.json文件(运行npm init),运行下载vant webapp,构建npm。按照官方文档里面的说明进行操作

使用Vant组件库

可以在app.json的usingComponents节点下引入需要的组件,即可以在wxml中直接使用组件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2xsbaZx6-1681393028115)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230412153109238.png)]

定制全局主题

使用CSS变量来实现定制主题

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-G9XzTdNq-1681393028115)(D:\桌面\前端\笔记的图片\7d5a95dd455767c8729e17eba2299c57.jpg)]

在app.wxss中写入CSS变量,即可对全局生效

变量名字的文档:vant-weapp/var.less at dev · youzan/vant-weapp · GitHub

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oXYps0mo-1681393028116)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230412155011906.png)]

2.API Promise化

指通过额外的配置,将回调函数的异步API,升级改造为基于Promise的异步API。从而提高代码的可读性、维护性、避免回调地狱的问题

实现API的Promise化

实现这个功能主要依赖于miniprogram-api-promise这个第三方的npm包:npm i --save miniprogram-api-promise。每次安装完新的包都得重新点击工具-构建npm

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QrFiGVJH-1681393028116)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230412160259911.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JgY9EiVC-1681393028116)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230412160625015.png)]

调用Promise化之后的异步API

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wOEVs1Il-1681393028117)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230412161621267.png)]

三.全局数据共享

1.概述

为了解决组件之间数据共享的问题;常用的全局组件方案有:Vuex、Redux、Mobx。在小程序中可以使用mobx-miniprogram配合mobx-miniprogram-bindings实现全局数据共享;其中mobx-miniprogram用来创建Store对象,mobx-miniprogram-bindings用来把Store中的共享数据方法,绑定到组件或页面中使用。

安装MobX相关的包:npm i --save mobx-miniprogram mobx-miniprogram-bindings(安装成功后重新构建npm)

2.创建MobX的实例Store实例

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jRgWThKT-1681393028117)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230412204341270.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hZGmcyUG-1681393028117)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230412204752496.png)]

3.将Store中的成员绑定到页面中

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MLZ7P6MI-1681393028117)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230412212518844.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zX6g3wA4-1681393028118)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230412210727557.png)]

4.将Store中的成员绑定到组件中

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4E5KnFeF-1681393028118)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230412214033305.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0016SOua-1681393028119)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230412214422109.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hdqHo2sj-1681393028119)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230412214507931.png)]

四.分包

1.概述

指把一个完整的小程序项目,按照需求划分为不同的子包,在构建时打包成不同的分包,用户在使用时按需进行加载

好处:优化小程序首次启动的下载时间,在多团队共同开发时可以更好的解耦协作

分包前,小程序项目中所有的页面和资源都被打包到了一起,导致整个项目体积过大,影响小程序首次启动和下载时间

分包后,小程序由一个主包+多个分包;主包包含项目的启动页面或TabBar页面、以及所有分包都需要用到的一些公共资源;分包包含当前分包有关的页面和私有资源

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6fIVRJd5-1681393028119)(D:\桌面\前端\笔记的图片\e0c89c6122bb7ff1a89dea99c1902c1f.jpg)]

分包的加载规则:

1.在小程序启动时,默认会下载主包并启动主包内页面,tabBar页面需要放到主包中

2.当用户进入分包内某个页面时,客户端会把对应的分包下载下来,下载完成后进行展示:非tabBar页面可以按照功能不同,划分为不同的分包之后,进行按需下载。

分包的体积限制:目前,小程序分包的大小有以下两种限制:整个小程序所有分包大小不能超过16M,单个主包/分包不能超过2M

2.使用分包

通过subPackages节点生命分包的结构,root属性指定分包的根目录名称,pages属性指定所有页面的存放路径,必须指定这两个节点!name属性指定分包的别名,

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VXyjyTJd-1681393028120)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230413093614730.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lEFms8fS-1681393028120)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230413093815366.png)]

分包原则

小程序按照subpackages的配置进行分包,subpackages之外的目录将被打包到主包中,

主包也可以有自己的pages(就是最外层的pages字段),

tabBar页面必须在主包内,分包之间不能相互嵌套。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XaIv8bgw-1681393028120)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230413094159625.png)]

引用原则

主包无法应用分包内的私有资源

分包之间不能那个相互引用私有资源

分包可以引用主包内的公共资源

3.独立分包

独立分包本质上也是分包,它可以独立于主包和其他分包单独运行。

与普通分包的区别:是否依赖于主包才能运行

使用场景:某些一定功能独立性的页面配置到独立分包中,让其不依赖主包即可运行,很大程度上提升分包页面的启动速度

一个小程序可以有多个独立分包

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8JoR2ZRV-1681393028121)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230413095809471.png)]

引用原则

独立分包和普通分包以及主包之间,是相互隔绝的,不能相互引用彼此的资源:

主包无法引用独立分包内的私有资源,

独立分包之间,不能相互引用私有资源,

独立分包和普通分包之间,不能相互引用私有资源

PS:独立分包不能引用主包内的公共资源

4.分包预下载

在进入小程序的某个页面时,由框架自动预下载可能需要的分包,从而提升进入后续分包页面时的启动速度

配置分包预下载

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v9Bi8XOT-1681393028121)(C:\Users\t-y-x\AppData\Roaming\Typora\typora-user-images\image-20230413101343097.png)]

分包预下载的限制

同一个分包中页面享有的预下载大小限额2M

五.案例-自定义tabBar

开发文档:自定义 tabBar | 微信开放文档 (qq.com)

bBar页面、以及所有分包都需要用到的一些公共资源;分包包含当前分包有关的页面和私有资源

[外链图片转存中…(img-6fIVRJd5-1681393028119)]

分包的加载规则:

1.在小程序启动时,默认会下载主包并启动主包内页面,tabBar页面需要放到主包中

2.当用户进入分包内某个页面时,客户端会把对应的分包下载下来,下载完成后进行展示:非tabBar页面可以按照功能不同,划分为不同的分包之后,进行按需下载。

分包的体积限制:目前,小程序分包的大小有以下两种限制:整个小程序所有分包大小不能超过16M,单个主包/分包不能超过2M

2.使用分包

通过subPackages节点生命分包的结构,root属性指定分包的根目录名称,pages属性指定所有页面的存放路径,必须指定这两个节点!name属性指定分包的别名,

[外链图片转存中…(img-VXyjyTJd-1681393028120)]

[外链图片转存中…(img-lEFms8fS-1681393028120)]

分包原则

小程序按照subpackages的配置进行分包,subpackages之外的目录将被打包到主包中,

主包也可以有自己的pages(就是最外层的pages字段),

tabBar页面必须在主包内,分包之间不能相互嵌套。

[外链图片转存中…(img-XaIv8bgw-1681393028120)]

引用原则

主包无法应用分包内的私有资源

分包之间不能那个相互引用私有资源

分包可以引用主包内的公共资源

3.独立分包

独立分包本质上也是分包,它可以独立于主包和其他分包单独运行。

与普通分包的区别:是否依赖于主包才能运行

使用场景:某些一定功能独立性的页面配置到独立分包中,让其不依赖主包即可运行,很大程度上提升分包页面的启动速度

一个小程序可以有多个独立分包

[外链图片转存中…(img-8JoR2ZRV-1681393028121)]

引用原则

独立分包和普通分包以及主包之间,是相互隔绝的,不能相互引用彼此的资源:

主包无法引用独立分包内的私有资源,

独立分包之间,不能相互引用私有资源,

独立分包和普通分包之间,不能相互引用私有资源

PS:独立分包不能引用主包内的公共资源

4.分包预下载

在进入小程序的某个页面时,由框架自动预下载可能需要的分包,从而提升进入后续分包页面时的启动速度

配置分包预下载

[外链图片转存中…(img-v9Bi8XOT-1681393028121)]

分包预下载的限制

同一个分包中页面享有的预下载大小限额2M

五.案例-自定义tabBar

开发文档:自定义 tabBar | 微信开放文档 (qq.com)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

来地球玩啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值