微信小程序开发-学习笔记

本学习笔记整理于准备学校腾讯校园地图项目期间,用于遗忘时查漏补缺。如果能够帮助到您,那就更好啦!

1. 小程序的基本组成结构

1.1 文件组织

image-20231105005012151

 // utils包下存放工具性质模块,如格式化时间的模块
 const formatTime = date => { // formatTime函数接收一个date对象
   const year = date.getFullYear()
   const month = date.getMonth() + 1
   const day = date.getDate()
   const hour = date.getHours()
   const minute = date.getMinutes()
   const second = date.getSeconds()
 ​
   return `${[year, month, day].map(formatNumber).join('/')} ${[hour, minute, second].map(formatNumber).join(':')}` // 返回格式化时间
 }
 ​
 const formatNumber = n => { // 接收一个n
   n = n.toString()
   return n[1] ? n : `0${n}`
 }
 ​
 module.exports = { // 向外导出该函数
   formatTime
 }

1.2 json配置文件

小程序中的各种json文件

image-20231105211237599

1.2.1 app.json

image-20231105211743641

1.2.2 project.config.json

image-20231105212529619

1.2.3 sitemap.json

image-20231105212916117

1.2.4 每个页面的json

image-20231105213227212

2. 小程序的页面

2.1 新建页面

image-20231105215037899

2.2 修改项目首页

image-20231105232345004

2.3 WXML & WXSS & JS

WXML: Wexin Markup Language

image-20231105233120192

WXSS: Weixin Style Sheets

image-20231106015211702

JS

image-20231106020101022

image-20231106020042360

3. 小程序的宿主环境

image-20231106020448043

image-20231106020512088


小程序的宿主环境为小程序的运行提供了:

3.1 通信模型

image-20231106020943398

image-20231106021202654

3.2 运行机制

image-20231106021644128

image-20231106021707456

4. 组件

小程序的组件分为9大类:

4.1 视图容器组件

image-20231106022343046

1. view

<div>类似,都是块状元素,默认占据一整行,可通过display: flex旋转

2. scroll-view

可滚动的视图区域,用以实现滚动列表

 <!-- 横向滚动 -->
 <scroll-view class="..." scroll-x> 
   <view>A</view>
   <view>B</view>
   <view>C</view>
 </scroll-view>
 ​
 <!-- 纵向滚动 -->
 <scroll-view class="..." scroll-y> 
   <view>A</view>
   <view>B</view>
   <view>C</view>
 </scroll-view>
 <!-- 纵向滚动时必须给scroll-view加一个高度 -->
3. swiper

轮播图效果

属性:

image-20231106204402182

 <!-- indicator-dots:显示轮播图小点 -->
 <swiper class="swiper-container" indicator-dots circular>
   <!-- 轮播图1 -->
   <swiper-item>
     <view class="item">A</view>
   </swiper-item>
 ​
   <!-- 轮播图2 -->
   <swiper-item>
     <view class="item">B</view>
   </swiper-item>
 ​
   <!-- 轮播图3 -->
   <swiper-item>
     <view class="item">C</view>
   </swiper-item>
 </swiper>
 // swiper的尺寸
 .swiper-container{ 
   height: 200rpx;
 }
 ​
 // swiper的每个item的尺寸
 .item{
   height: 100%;
   line-height: 150rpx;
   text-align: center;
 }
 ​
 swiper-item:nth-child(1){
   background-color: rosybrown;
 }
 ​
 swiper-item:nth-child(2){
   background-color:seagreen;
 }
 ​
 swiper-item:nth-child(3){
   background-color:slateblue;
 }

4.2 基础内容组件

1. text

文本组件,类似<span>,行内元素,一行可以有多个<text></text>

 <!-- selectable表明该text可以被用户长按选中进行拷贝之类的操作(selectable只在<text>中有用) -->
 <text selectable>18328048639</text>
2. rich-text

富文本组件,支持将HTML字符串渲染为WXML结构

比如接收服务器发送的HTML页面文件,将其在小程序中渲染

 <!-- 通过rich-text组件的nodes属性结点,把HTML字符串渲染为对应的UI结构 -->
 <rich-text nodes="<h1 style='color:red;'>标题</h1>"></rich-text>
3. button
4. image
  • 图片组件
  • image组件有默认宽度(300px)、高度(240px)
  •  <image src="..." ></image>
     <image src="..." mode="..."></image>
    

!!!注意:iamge组件中有mode属性来指定图片的裁剪和缩放模式

image-20231106212034191

5. navigator
  • 页面导航组件,类似于HTML的<a>

4.3 表单组件

4.4 导航组件

4.5 媒体组件

4.6 map地图组件

4.7 canvas画布组件

4.8 开放能力

4.9 无障碍访问

5. API

image-20231106212552927

6. WXML模板语法

6.1 数据绑定

数据绑定:

  1. .jsdata中定义数据
  2. .wxml中使用数据
6.1.1 定义数据
 // .js
 Page({
   data:{
     info:'Hello world!',
     imgSrc:'https://...'
     msgList:[{msg:"Hello"}, {msg:"world"}],
     randomNumber: Math.random()*10  
   },
 })

Math.random()生成0~1之间任意小数

Math.random().toFixed(2)生成0~1之间任意两位小数

6.1.2 绑定数据

Mustache语法/插值表达式{{}}

 <view>{{ info }}</view>

Mustache表达式:

  1. 绑定内容(和Vue相同)

    如上

  2. 绑定属性(和Vue不同,Vue:v-bind/: wx:{{}}

     <image src="{{ imgSrc }}"></image>
    
  3. 运算(三元运算、算数运算)

     <view>{{ randomNumber >= 5 ?'大于5' : '小于5' }}</view>
    

6.2 事件绑定

6.2.1 常见事件

image-20231108212505516

6.2.2 事件对象的属性

image-20231108213001389

target和currentTarget的区别:

image-20231108213655864

6.2.3 bindtap语法
 <button type='primary' bindtap='btnHandler'> //触发tap事件后就会给js文件传一个事件对象event(e)
   提交
 </button>
 Page({
   data:{
     ...
   },
   btnHandler(e){ // 接收事件对象event(e)
     ...
     console.log(e)
   }
 })

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

调用this.setData({

要修改的数据: 新值

})

 <button type='primary' bindtap='btnHandler'> //触发tap事件后就会给js文件传一个事件对象event(e)
   {{ count }}
 </button>
 Page({
   data:{ //data中定义初始值
     count:0
   },
   
   btnHandler(e){ // 接收事件对象event(e)
     
     this.setData({
       count: this.data.count + 1
     })
     
     console.log(e)
   }
 })
6.2.4 bindinput语法

image-20231109145754539

6.3 事件传参

image-20231109142616641

image-20231109144018316

image-20231109144058225

 <button type='primary' bindtap='btnHandler' data-msg='{{5}}'> //触发tap事件后就会给js文件传一个事件对象event(e),事件的参数msg的值(5)会被嵌入到事件对象中
   {{ count }}
 </button>
 btnHandler(e){
   let msg=e.target.dataset.msg // 获取事件传递的参数
   console.log(msg)
 }

!!!注意 data-*='…'中传递字符串的话,不用{{}},传递数字要用{{}}

6.4 条件渲染

 <view wx:if="{{condition}}">...</view>
 <view wx:elif="{{condition}}">...</view>
 <view wx:else="{{condition}}">...</view>

image-20231109152416551

image-20231109152639692

image-20231109152929265

6.5 列表渲染

image-20231109164113151

image-20231109164913893

建议使用wx:for进行列表渲染时,都加上wx:key提高渲染效率。数组中有id就用id,若无id就建议用index

7. WXML模板样式

7.1 rpx (responsive pixel)

用于解决屏幕适配问题

image-20231109170654768

7.2 样式导入

image-20231109170928658

8. 全局配置

image-20231109171726659

8.1 window

image-20231109171932989

window常用的配置属性:

image-20231109172229631

下拉效果设置:

 "window":{
   "enablePullDownRefresh":true, // 开启下拉刷新
   "backgroundColor":"#f7e6ff", // 设置下拉展示的小方块的背景色
   "backgroundTextStyle":light // 下拉刷新展示的三个小圆点的颜色
 }

上拉触底距离设置:

上拉触底指的是用户往上滑动页面,快划到页面底部时,可设置效果(如加载新数据)

image-20231109175945148

8.2 tabBar

image-20231109182554503

tabBar的属性:

image-20231109183436955

tabBar配置:

image-20231109190111049

9. 页面配置

image-20231109194628128

image-20231109194728116

10. 发送网络请求

10.1 网络请求限制

image-20231110110117701

10.2 配置request合法域名

image-20231110111022038

注意事项:

  • 域名只支持https协议
  • 域名不能使用ip地址(https://127.1.2…)或localhost
  • 域名必须经过ICP备案

10.3 GET

直接调用wx.request()方法

 wx.request({
   url:'...必须为https协议,并且已经配置好域名',
   method:'GET',
   data:{ // GET也可传参,拼接到url后
     name:'zs',
     age:22
   },
   
   success:(res)->{ //发起请求成功后的回调函数
     console.log(res.data)
   }
 })

10.4 POST

直接调用wx.request()方法

 wx.request({
   url:'...必须为https协议,并且已经配置好域名',
   method:'POST',
   data:{ 
     name:'zs',
     age:22
   },
   
   success:(res)->{ //发起请求成功后的回调函数
     console.log(res.data)
   }
 })

10.5 onLoad()时加载数据

类似于Vue在挂载之后mounted()时就从服务器获取数据,wx一般在onLoad()时向服务器请求数据

10.6 跳过request合法域名限制

image-20231110120059089

11. 页面导航

小程序中,实现页面跳转有两种:

  • 声明式导航

    • 声明一个<navigator>组件,点击组件实现跳转
  • 编程式导航

    • 调用小程序提供的导航API,实现页面跳转

11.1 导航到tabBar

会显示tabBar,导航到的tabBar会突出

1. 声明式导航

image-20231112224706285

2. 编程式导航

switchTab

image-20231112225930234

 <button bindtap="gotoMessage">跳转到消息页面</button>
 ​
 gotoMessage(){
   wx.switchTab({
     url:'pages/message/message'
   })
 }

11.2 导航到非tabBar

1. 声明式导航

导航到的页面没有底部tabBar

image-20231112224940618

2. 编程式导航

navigateTo

image-20231112230738527

11.3 后退导航

1. 声明式导航

如“返回到上一页”,“<”

image-20231112225234679

后退一个页面,delta值可缺省

2. 编程式导航

navigateBack

image-20231112231008076

11.4 导航传参

1. 声明式导航

image-20231112231634223

2. 编程式导航

image-20231112233353995

11.5 接收参数

可以在该页面onLoad加载时,接收上一个页面的传递的参数

 onLoad: function(options){
   console.log(options) // options即为传递的参数
 }
 // 但options只能在该函数onload()中使用
 ​
 // 修改:
 data:{
   query:{} // 一般都会创建一个query空对象,用于保存导航传递的参数对象,这样可以被其它函数访问到
 }
 ​
 onLoad:function(options){
   console.log(options)
   this.setData({
     query: options
   })
 }

12. 页面事件

12.1 下拉刷新事件

下拉刷新事件:重新加载数据

  1. 启用下拉刷新

image-20231112234655274

  1. 配置下拉刷新窗口样式

    支持的样式有:

    • 下拉刷新窗口颜色:backgroudColor(16进制)
    • 下拉刷新loading样式:backgroudTextStyle(只支持dark/light
  2. 监听页面的下拉刷新事件

     与onLoad()同级
     onPullDownRefresh:function(){
       this.setData({
         ... // 刷新操作
       })
     }
    
  3. 停止下拉刷新

    真机上,下拉刷新效果不会自动停止,需要手动停止下拉刷新wx.stopPullDownRefresh()

     onPullDownRefresh:function(){
       this.setData({
         ... // 刷新操作
       })
         
       // 刷新操作结束后
       wx.stopPullDownRefresh()
     }
    

12.2 上拉触底事件

加载更多数据

  1. 监听上拉触底事件

     onReachBottom: function(){
       ... // 调用网络请求函数
     }
    

    问题:如果频繁地上下滑动页面,会频繁地触发上拉触底事件,频繁地进行网络请求

    解决方案:使用节流阀(类似于互斥锁mutex)

12.3 e.g.上拉触底加载更多数据

 Page({
   data: {
     colorList: [], // 需通过网络请求的颜色列表
     isLoading: false, // 下拉触底的节流阀
   },
 ​
   onLoad(options) {
     this.getColorList();
   },
 ​
   // 网络请求的函数
   getColorList() {
     wx.showLoading({
       // 数据加载提示
       title: "数据加载中",
       mask: true,
     });
 ​
     // 准备进行网络请求,节流阀开启
     this.setData({
       isLoading: true,
     });
 ​
     wx.request({
       url: "https://applet-base-api-t.itheima.net/api/color",
       method: "GET",
       success: (result) => {
         console.log(result.data);
 ​
         this.setData({
           colorList: [...this.data.colorList, ...result.data.data], // ***js数组的展开运算符实现数组拼接***
         });
       },
       complete: () => {
         // 网络请求结束(无论成功还是失败)
         wx.hideLoading();
         // 网络请求结束后,节流阀关闭
         this.setData({
           isLoading: false,
         });
       },
     });
   },
 ​
   // 监听上拉触底事件(若正在进行网络请求,就无法进行上拉触底继续加载数据)
   onReachBottom() {
     if (this.Page.isLoading == false) {
       this.getColorList();
     }
   },
 });

13. 生命周期

image-20231114005947478

  1. 生命周期函数

    伴随着小程序生命周期,自动按序执行

    分类:

    1. 应用生命周期函数

      1. onLaunch:小程序初始化完成时执行,全局只触发一次,可用于初始化相关操作(小程序初始化时,通常读取本地数据对小程序数据进行初始化,就在onLaunch中写)
      2. onShow:小程序启动或后台到前台显示时触发
      3. onHide:小程序从前台到后台不显示时触发

      image-20231114010546816

    2. 页面生命周期函数

      image-20231114011949498

14. wxs脚本

WeiXin Script脚本语言,可结合WXML构建出页面的结构

类似于html中的标签

wxml中无法调用页面的js文件中的函数,但是wxml可以调用wxs文件中定义的函数

wxs的典型应用就是形如Vue中的过滤器经常配合Mustache语法使用

  1. wxs和javascript的区别

    image-20231114012617673

  2. 内嵌wxs脚本

    • wxs脚本可以内嵌在wxml文件中,就像html中可以内嵌

2023/11/18

由于事情太多(学业、选调),达到并行运行峰值,故2023/11/18临时决定:本文档暂停更新,复更时间另行确定

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值