关于微信小程序(随记)

本文详细介绍了微信小程序的开发,包括与网页开发的区别,如WXML和WXSS的结构、JS文件分类,以及小程序的宿主环境,如渲染层、逻辑层和通信模型。此外,还深入探讨了模板语法,如数据绑定、事件处理和条件渲染,以及WXSS样式系统。文章还涵盖了网络数据请求、页面导航、生命周期、组件创建与引用、以及如何使用npm包等内容,全面展示了小程序开发的关键技术和实践细节。
摘要由CSDN通过智能技术生成

一、小程序与普通网页开发的区别?

1.1 区别

在这里插入图片描述

1.2 小程序代码构成

项目的基本组成结构:

  1. pages 用来存放所有小程序的页面,每个页面都是一个单独的文件夹
  2. utils 用来存放工具性质的模块
  3. app.js 整个小程序项目的入口文件
  4. app.json 小程序项目的全局配置文件
  5. app.wxss 小程序项目的全局样式文件
  6. project.config.json 项目的配置文件
  7. sitemap.json 用来配置小程序及其页面是否允许被微信索引

1.3 WXML

WXML 是小程序框架的标签语言,用来构建小程序页面的结构,其作用类似于网页开发中的 HTML。他们
主要存在下面几点的差别

  1. 标签名不同
  2. HTML(div)
  3. WXML(view, text, image, navigator)
  4. 属性节点不同
  5. 提供了类似于 vue 中的模板语法
  6. 数据绑定
  7. 列表渲染
  8. 条件渲染

1.4 WXSS

WXSS (WeiXin Style Sheets) 是一套样式语言,用于描述 WXML 的组件样式,类似于网页开发中的
CSS 。他们主要存在下面几点的差别
① 新增了 rpx 尺寸单位
CSS 中需要手动进行像素单位换算,例如 rem
WXSS 在底层支持新的尺寸单位 rpx ,在不同大小的屏幕上小程序会自动进行换算
② 提供了全局的样式和局部样式
项目根目录中的 app.wxss 会作用于所有小程序页面
局部页面的 .wxss 样式仅对当前页面生效
③ WXSS 仅支持部分 CSS 选择器
.class 和 #id
element
并集选择器、后代选择器
::after 和 ::before 等伪类选择器

1.5 JS文件的分类

小程序中的 JS 文件分为三大类,分别是:
① app.js
是整个小程序项目的入口文件,通过调用 App() 函数来启动整个小程序
② 页面的 .js 文件
是页面的入口文件,通过调用 Page() 函数来创建并运行页面
③ 普通的 .js 文件
是普通的功能模块文件,用来封装公共的函数或属性供页面使用

二、小程序宿主环境

2.1 手机微信

在这里插入图片描述

2.2 包含的内容

在这里插入图片描述

2.3 通信模型

其中:
① WXML 模板和 WXSS 样式工作在渲染层
② JS 脚本工作在逻辑层
通信模型指的是:
① 渲染层和逻辑层之间的通信
② 逻辑层和第三方服务器之间的通信
在这里插入图片描述
加粗样式### 2.4 运行机制
小程序启动过程:
1.把小程序代码包下载到本地
2.解析app.json全局配置文件
3.执行app.js小程序入口文件
4.渲染小程序首页
5.小程序启动完成
在这里插入图片描述
页面渲染过程:
在这里插入图片描述
补充:

2.5 组件

在这里插入图片描述

  1. 常用视图容器类组件
    常用:
    view
    普通视图区域
    类似于 HTML 中的 div,是一个块级元素
    常用来实现页面的布局效果
    scroll-view
    可滚动的视图区域
    常用来实现滚动列表效果
    swiper 和 swiper-item
    轮播图容器组件 和 轮播图 item 组件
    在这里插入图片描述
    3.在这里插入图片描述
  2. 轮播图结构:
    在这里插入图片描述
    样式:

在这里插入图片描述

在这里插入图片描述
5. 常见属性
在这里插入图片描述
swiper 还有其他相应的属性, 如下:
indicator-dots 是否显示面板指示点
indicator-color 指示点颜色
indicator-active-color 激活指示点颜色
autoplay 是否自动切换
interval 自动切换时间间隔
circular 是否采用衔接滑动

补充:在这里插入图片描述
6. text 和 rich-text

text 组件
文本组件
类似于 HTML 中的 span 标签,是一个行内元素
rich-text 组件
富文本组件 支持把 HTML 字符串渲染为 WXML 结构
7.button 组件
button 是按钮组件,它的功能比 HTML 中的 button 按钮丰富,我们可以通过 open-type 属性可以调用
微信提供的各种功能
!-- 通过type属性指定按钮颜色类型 -->
普通按钮
主色调按钮
警告按钮

普通按钮
主色调按钮
警告按钮

普通按钮
主色调按钮
警告按钮
8.image组件
image 是图片组件(注意,不是 img 哦, 是 image ), 用来展示图片的, 它也是通过 src 属性来指明图片的路
径.
mode属性:
在这里插入图片描述

2.6 API 三大分类

顶级对象 wx
1.事件监听API
2…同步API
3.异步API
① 事件监听API
特点:以 on 开头,用来监听某些事件的触发
举例: wx.onWindowResize(function callback) 监听窗口尺寸变化的事件
② 同步 API
特点1:以 Sync 结尾的 API 都是同步 API
特点2:同步 API 的执行结果,可以通过函数返回值直接获取,如果执行出错会抛出异常
举例: wx.setStorageSync(‘key’, ‘value’) 向本地存储中写入内容
③ 异步 API
特点:类似于 jQuery 中的 $.ajax(options) 函数,需要通过 success、fail、complete 接收调
用的结果
举例: wx.request() 发起网络数据请求,通过 success 回调函数接收数据

2.7 协同工作和发布

在中大型的公司里,人员的分工非常仔细:同一个小程序项目,一般会有不同岗位、不同角色的员工同
时参与设计与开发。
此时出于管理需要,我们迫切需要对不同岗位、不同角色的员工的权限进行边界的划分,使他们能够高
效的进行协同工作。
组织结构:
项目管理者
产品组
提需求
设计组
出设计方案
开发组
代码开发
测试组
项目测试
在这里插入图片描述
开发流程:
在这里插入图片描述
成员管理:
①项目成员:
表示参与小程序开发、运营的成员
可登录小程序管理后台
管理员可以添加、删除项目成员,并设置项目成员的角色
② 体验成员:
表示参与小程序内测体验的成员
可使用体验版小程序,但不属于项目成员
管理员及项目成员均可添加、删除体验成员

三、 模板语法-数据绑定

3.1 数据绑定

小程序中, 数据绑定分为2个步骤:
① 在 data 中定义数据
② 在 WXML 中使用数据
把data中的数据绑定到页面中渲染,使用 Mustache 语法(双大括号)将变量包起来即可
语法格式为 { { info }}

3.2 事件绑定

  1. 事件是渲染层到逻辑层的通讯方式。通过事件可以将用户在渲染层产生的行为,反馈到逻辑层进行业务
    的处理
  2. 在这里插入图片描述
  3. 在这里插入图片描述
    重点关注 target 和 detail 这两个属性
  4. 关于 target 属性, 它经常会和 currentTarget 容易混淆
    target 是触发该事件的源头组件,
    currentTarget 则是当前事件所绑定的组件。

    小程序也有事件冒泡
    e.target 指向的是触发事件的源头组件,因此, e.target 是内部的按钮组件
    e.currentTarget 指向的是当前正在触发事件的那个组件,因此, e.currentTarget 是当前的 view
    组件
  5. bindtap 的使用
    ① 通过 bindtap ,可以为组件绑定 tap 触摸事件
<!-- tap触摸事件 -->
<button type="primary" bindtap="onHandleTap">按钮</button>
<!-- +1按钮的事件 -->
<view class="countBox">{
   {
    count }}</view>
<button bindtap="onAddHandle">点我试试</button>

② 在页面的 .js 文件中定义对应的事件处理函数,事件参数通过形参 event (一般简写成 e ) 来接
收, 注意,事件处理函数需要和 data 平级

Page({
   
data: {
   
 
},
onHandleTap : function (e) {
   
  // 事件对象e
  console.log(e);
},
onAddHandle: function () {
   
 
}
})
  1. js 中访问data 中的数据
    在 js 代码中, 如果想要访问 data中 的数据, 是通过 this.data.xxx 的方式进行访问
  2. js 中修改data 中的数据
    通过调用 this.setData(dataObject) 方法,可以给页面 data 中的数据重新赋值,
onAddHandle: function () {
   
  this.setData({
   
   count: this.data.count + 1 // 在原来值基础上+1
 })
}

3.3 事件传参

  1. 小程序中的事件传参比较特殊,不能在绑定事件的同时为事件处理函数传递参数。
    因为小程序会把 bindtap 的属性值,统一当作事件名称来处理,相当于要调用一个名称为
    btnHandler(123) 的事件处理函数。
    我们可以为组件提供 data-* 自定义属性传参,其中 * 代表的是参数的名字
    事件传参-拼接字符串
    info 会作为名字存储在事件对象的 target 中的 dataset 中, 2 会被解析为值
    在事件处理函数中,通过 event.target.dataset.info 即可获取到值
onBtnString (e) {
   
  this.setData({
   
    // this.data.count就是旧值
    count: this.data.count + e.target.dataset.info
 })
}
  1. bindinput 的使用

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

<view class="iptBox">
 <!-- input事件 -->
 <input class="ipt1" bindinput="inputValue" focus></input>
</view>

② 在页面的 .js 文件中定义事件处理函数:

inputValue (e) {
   
  console.log(e);
  console.log(e.detail.value);
}
  1. 实现小程序中的双向数据绑定

实现步骤:
① 定义数据
② 渲染结构, 绑定 data 中的数据
③ 美化样式
④ 监听 input 事件
示例代码:
定义数据:

 data: {
   
  msg: '请输入...'
}

渲染结构:将data中的 msg 绑定到输入框的 value 属性

<view class="iptBox">
 <input value="{
   { msg }}" bindinput="inputHandle" class="ipt2"
type="checkbox"></input>
</view>

监听 input 事件:

// 实现input的数据和data数据同步
 inputHandle(e) {
   
  this.setData({
   
   msg: e.detail.value
 })
}
  1. 条件渲染
  2. 在小程序中,使用 wx:if="{ {condition}}" 来判断是否需要渲染该代码块
    也可以配合 wx:elif 和 wx:else 来添加 else 判断:
    示例代码:
<!-- wx:if wx:else-if wx:else 条件渲染 -->
<view wx:if="{
   { type === 1 }}" class="text"></view>
<view wx:elif="{
   { type === 2 }}" class="text"></view>
<view wx:else>保密</view>
  1. 结合 使用 wx:if

如果要一次性控制多个组件的展示与隐藏,可以使用一个 标签将多个组件包装起来,并在
标签上使用 wx:if 控制属性,使用block标签进行包裹,只是包裹性值,不会再页面渲染,类似于
template 标签
代码示例:

<block wx:if="{
   { true }}">
 <view>显示</view>
 <view>多个</view>
 <view>组件</view>
</block>

注意: block并不是一个组件,它只是一个包裹性质的容器,不会在页面中做任何渲染。

  1. hidden
    在小程序中,直接使用 hidden="{ { condition }}" 也能控制元素的显示与隐藏:
<view hidden="{
   { flag }}">条件位 true 时,隐藏元素</view>
  1. wx:if 与 hidden 的对比
    ① 运行方式不同
    wx:if 以动态创建和移除元素的方式,控制元素的展示与隐藏
    hidden 以切换样式的方式( display: none/block; ),控制元素的显示与隐藏
    ② 使用建议
    频繁切换时,建议使用 hidden
    控制条件复杂时,建议使用 wx:if 搭配 wx:elif 、 wx:else 进行展示与隐藏的切换
  2. 列表渲染
    在小程序中, 可以通过 wx:for 指定数组,进行循环渲染重复的组件结构
    语法示例:
data: {
   
 arr1: [
  '苹果',
  '华为',
  '小米'
 ]
}
<!-- 循环渲染模板语法 -->
<view wx:for="{
   { arr1 }}" class="text">
索引是 {
   {
    index }} 当前项是: {
   {
    item }}
</view>

默认情况下,当前循环项的索引用 index 表示;当前循环项用 item 表示。
我们也可以手动指定索引和当前项的变量名
使用 wx:for-index 可以指定当前循环项的索引的变量名
使用 wx:for-item 可以指定当前项的变量名
代码示例:

<!-- 手动指定索引和当前项的变量名 -->
<view wx:for="{
   { arr1 }}" class="text" wx:for-index="i" wx:for-item="item">
索引是 {
   {
    i }} 当前项是: {
   {
    item }}
</view>
``
`
**key**
类似于 Vue 列表渲染中的 **:key** ,小程序在实现列表渲染时,也建议为渲染出来的列表项指定唯
一的 key 值,从而提高渲染的效率
代码示例:

```javascript
<!-- 手动指定索引和当前项的变量名 -->
<view wx:key="index" wx:for="{
   { arr1 }}" class="text" wx:for-index="i"
wx:for-item="item">
索引是 {
   {
    i }} 当前项是: {
   {
    item }}
</view>
<!-- wx:key 提高渲染效率 -->
<view wx:key="id" wx:for="{
   { arr2 }}" class="text1">
当前项是: {
   {
    item.username }}
</view>

四、 WXSS模板样式

4.1 wxss和 css 的关系

  • rpx尺寸单位
  • @import 样式导入

rpx 的实现原理非常简单:鉴于不同设备屏幕的大小不同,为了实现屏幕的自动适配, rpx 把所有设
备的屏幕,
在宽度上等分为 750 份, 1份就是1 rpx , 所以:
在较小的设备上,1 rpx 所代表的宽度较小
在较大的设备上,1 rpx 所代表的宽度较大
小程序在不同设备上运行的时候,会自动把 rpx 的样式单位换算成对应的像素单位来渲染,从而实现屏幕适配。
使用 WXSS 提供的 @import 语法,可以导入外联的样式表。
@import 后跟需要导入的外联样式表的相对路径,用分号 ; 表示语句结束。

4.2 全局样式和局部样式

  1. 全局样式
    定义在 app.wxss 中的样式为全局样式,作用于每一个页面
  2. 局部样式
    在页面的 . wxss 文件中定义的样式为局部样式,只作用于当前页面。
    注意:
    ① 当局部样式和全局样式冲突时,根据 就近原则 ,局部样式会覆盖全局样式
    ② 当局部样式的权重大于或等于全局样式的权重时,才会覆盖全局的样式

4.3 全局配置

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

  1. 常用配置:
    ① pages
    记录当前小程序所有页面的存放路径
    ② window
    全局设置小程序窗口的外观
    ③ tabBar
    设置小程序底部的 tabBar 效果
    ④ style
    是否启用新版的组件样式
  2. window
    导航栏 - 顶部导航栏区域
    背景区 - 默认不可见,下拉才显示
    页面主体区 - 页面主体用来显示 wxml 中的布局
    在这里插入图片描述
    window节点常用配置项:
    在这里插入图片描述
  3. 下拉刷新
    设置步骤: app.json -> window -> 把 enablePullDownRefresh 的值设置为 true
    注意:在 app.json 中启用下拉刷新功能,会作用于每个小程序页面!
  4. 上拉触底(上拉加载)
    上拉触底是移动端的专有名词,通过手指在屏幕上的上拉滑动操作,从而加载更多数据的行为。
    设置步骤: app.json -> window ->为 onReachBottomDistance 设置新的数值
    注意:默认距离为50 px ,如果没有特殊需求,建议使用默认值即可。
  5. tabBar
    tabBar 是移动端应用常见的页面效果,用于实现多页面的快速切换。小程序中通常将其分为:
    底部 tabBar
    顶部 tabBar
    注意:
    tabBar 中只能配置最少 2 个、最多 5 个 tab 页签
    当渲染顶部 tabBar 时,不显示 icon ,只显示文本
  6. tabBar 的 6 个组成部分
    ① backgroundColor : tabBar 的背景色
    ② selectedIconPath :选中时的图片路径
    ③ borderStyle:tabBar 上边框的颜色
    ④ iconPath :未选中时的图片路径
    ⑤ selectedColor:tab 上的文字选中时的颜色
    ⑥ color:tab 上文字的默认(未选中)颜色

五、网络数据请求

5.1 如何在小程序中发起网络请求?

  1. 请求不能称作ajax请求,但是可以称为网络请求
    准备工作:
    考虑安全性,微信官方要求域名使用 https协议
    配置后台的request的合法域名
    具体代码
    如下
    小程序中的网络请求不存在跨域的问题
  2. 小程序中网络数据请求的限制
    2个限制:
    ① 只能请求 HTTPS 类型的接口
    ② 必须将接口的域名添加到信任列表中
  3. 配置request 合法域名
    需求描述:假设在自己的微信小程序中,希望请求 https://www.escook.cn/ 域名下的接口
    配置步骤:登录微信小程序管理后台 -> 开发 -> 开发设置 -> 服务器域名 -> 修改 request 合法域名
    注意事项:
    ① 域名只支持 https 协议
    ② 域名不能使用 IP 地址或 localhost
    ③ 域名必须经过 ICP 备案
    ④ 服务器域名一个月内最多可申请 5 次修改
  4. 发起GET 请求
    调用 wx.request()方法 发起GET请求
    代码示例:
// 发起GET请求
 onTapGet () {
   
  wx.request({
   
   // 请求地址,必须是以https://开头
   // 必须是配置在request合法域名
   url: 'https://www.escook.cn/api/get',
   // 请求方式
   method: 'GET',
   // 请求参数
   data: {
   
     name: 'zs',
     age: 22
  },
   // 请求成功的回调
   success: (res) => {
   
     console.log(res)
  }
 })
  1. 发起POST 请求
    同上 调用wx.request () 方法 发起POST请求
    代码示例:
// 发起GET请求
 onTapPost () {
   
  wx.request({
   
   // 请求地址,必须是以https://开头
   // 必须是配置在request合法域名
   url: 'https://www.escook.cn/api/post',
   // 请求方式
   method: 'POST',
   // 请求参数
   data: {
   
     name: 'lisi',
     age: 18
  },
   // 请求成功的回调
   success: (res) => {
   
     console.log(res)
  }
 })
  1. 在页面刚加载时请求数据
    很多情况,我们需要在页面加载时,自动请求一些初始化数据,在 onLoad 事件中调用获取数据的函数,
    代码示例:
/**
 * 生命周期函数--监听页面加载--初始化页面的数据
 */
 onLoad: function (options) {
   
  // 通过 this 关键字 调用上述两个方法
  // 可以自动发起请求,而不需要点击事件来触发
  this.onTapGet()
  this.onTapPost()
},
  1. 开发阶段我们有时候获取不到合法域名,这时候我们有一种方法可以跳过合法域名校验
    方法:
    在这里插入图片描述
    注意: 跳过 request 合法域名校验的选项,仅限在开发与调试阶段使用!
  2. 关于 跨域 和 Ajax 的说明
    跨域问题只存在于基于浏览器的 Web 开发中。由于小程序的宿主环境不是浏览器,而是微信客户端,
    所以小
    程序中不存在跨域的问题。
    Ajax 技术的核心是依赖于浏览器中的 XMLHttpRequest 这个对象,由于小程序的宿主环境是微信客户
    端,所
    以小程序中不能叫做“发起 Ajax 请求”,而是叫做“发起网络数据请求”。

5.2 页面导航

  1. 声明式导航
    在页面上声明一个 导航组件
    通过点击 组件实现页面跳转
    导航到 tabBar 页面
    tabBar 页面指的是被配置为 tabBar 的页面。
    在使用 组件跳转到指定的 tabBar 页面时,需要指定 url 属性和 open-type 属性,其中:
    url 表示要跳转的页面的地址,必须以 / 开头
    open-type 表示跳转的方式,必须为 switchTab
    代码示例:
<!-- 声明式导航 -->
<!--
 导航到 tabBar页面的方法:
 url必须以“/”根路径开头 
 并且必须配置open-type属性值为switchTab
 -->
<navigator url="/pages/message/message" open-type="switchTab">导航到消息页面
</navigator>

导航 到非tabBar页面:
非 tabBar 页面指的是没有被配置为 tabBar 的页面。
在使用 组件跳转到普通的非 tabBar 页面时,则需要指定 url 属性和

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值