微信小程序-小程序 API


注:本文章只描述一些重点,详情使用方法见官方文档:微信开放文档/开发

一、小程序 API 介绍

小程序开发框架提供丰富的微信原生 API,可以方便调起微信提供的能力,比如:获取用户信息、微信登录、微信支付等,小程序提供的 API 几乎都挂载在 wx 对象下,例如:wx.request()、wx.setStorage() 等,wx 对象上实际上就是小程序的宿主环境微信所提供的全局对象
小程序API分类:

异步 API 支持 callback 和 Promise 两种调用方式:
1、当接口参数 Object 对象中不包含 success/fail/complete 时默认返回 Promise
2、部分接口如 request、uploadFile 本身就有返回值,因此不支持 Promise 风格的调用方式,它们的 promisify 需要开发者自行封装。

二、小程序 API -网络请求

发起网络请求获取服务器的数据,需要调用 wx.request() API。
wx.request 请求的域名必须在微信公众平台配置,否则控制台会有报错:
在这里插入图片描述

微信公众平台配置域名:

配置完成后,重新编辑若仍报错,则需要重启此项目。
如何跳过域名检验:
1、微信开发者工具->右上角[详情]按钮->点击[本地设置]->勾选[不检验合法域名…]

2、在真机上,点击小程序的胶囊区域的分析按钮,在弹框中选择[开发调试],重启小程序即可。

注: 以上两种方式只适用于开发者工具、小程序的开发版和体验版,正式版必须配合法域名。
wxml 文件代码示例:

 <button type="warn" bind:tap="getData">获取数据</button>

js 文件代码示例:

getData(){
    //发起网络请求获取服务器的数据,需要调用 wx.request() API
    wx.request({
      //接口地址
      url: 'https://gmall-prod.atguigu.cn/mall-api/index/findBanner',
      //请求方式
      method:'GET',
      //请求参数
      data:{},
      //请求头
      header:{},
      //API 调用成功后,执行的回调
      success:(res) => {
        console.log(res)
        if (res.data.code === 200){
          this.setData({
            dataList: res.data.data
          })
        }
      },
      //API 调用失败后,执行的回调
      fail:(err) => {
        console.log(err)
      },
      //不管 API 调用成功还是失败后,执行的回调
      complete:(res) => {
        console.log(res)
      }
    })

三、小程序 API -界面交互

1、loading 提示框

小程序提供一些用于界面交互的 API,例如:loading 提示框、消息提示框、模态对话框等 API。
Loading 提示框通常配合网络请求来使用,主要用来提升用户体验,对应的 API 有两个:

  • 1.1、showLoading() 用来显示 loading 提示框
  • 1.2、hideLoading() 用来关闭 loading 提示框

js 文件代码示例:

// 显示 loading 提示框 
    wx.showLoading({
      //提示的内容不会自动换行,如果内容过多超过一行,多出的内容会被隐藏
      title: 'loading...',
      //是否显示透明蒙层,防止触摸穿透
      mask:true
    })
 //关闭 loading 提示框
    wx.hideLoading()
2、模态对话框&消息提示框

2.1、wx.showModal:模态对话框,常用来询问用户是否执行一些操作,例如:用户是否退出登录等
2.2、wx.showToast:消息提示框,根据用户的某些操作来告知操作的结果,例如:退出用户给提示、删除成功给提示等
wxml 文件代码示例:

<button type="primary" bind:tap="deleteHandler">删除商品</button>

js 文件代码示例:

  async deleteHandler() {
    // 模态对话框,常用来询问用户是否执行一些操作
    const { confirm } =  await wx.showModal({
      title: '提示',
      content: '是否删除该商品?',
      // complete 是异步返回的方式
      // complete: (res) => {
      //   if (res.cancel) {}
      //   if (res.confirm) {}
      // }
    })
    if (confirm) {
      // showToast:消息提示框,根据用户的某些操作来告知操作的结果
      wx.showToast({
        title: '删除成功',
        icon: 'none',
        duration: 2000
      })
    } else {
      wx.showToast({
        title: '取消删除',
        icon: 'error',
        duration: 2000
      })
    }
  }

三、小程序 API -本地存储

小程序本地存储是指小程序使用 API 将数据存储在用户设备上,方便小程序运行时或下次启动时快速读取这些数据。
注意事项: 对象类型的数据,可以直接存储获取,无需使用 JSON.stringify()、JSON.parse() 转换

wxml 文件代码示例:

<view>----------- 同步本地存储 ----------- </view>
<button size="mini" plain type="warn" bind:tap="setStorageSync">存储</button>
<button size="mini" plain type="primary" bind:tap="getStorageSync">获取</button>
<button size="mini" plain type="warn" bind:tap="removeStorageSync">删除</button>
<button size="mini" plain type="primary" bind:tap="clearStorageSync">清空</button>
<view>------------ 异步本地存储 ------------- </view>
<button size="mini" plain type="warn" bind:tap="setStorage">存储</button>
<button size="mini" plain type="primary" bind:tap="getStorage">获取</button>
<button size="mini" plain type="warn" bind:tap="removeStorage">删除</button>
<button size="mini" plain type="primary" bind:tap="clearStorage">清空</button>

js 文件代码示例:

  // 将数据存储到本地-同步
  setStorageSync() {
    // 第一个参数:本地存储中指定的 key;第二个参数:需要存储的数据
    wx.setStorageSync('numSync', 1)
    // 如果存储的数据是对象类型,无需使用 JSON.stringify()、JSON.parse() 转换,直接存储或获取即可
    wx.setStorageSync('objSync', { name: 'tom', age: 10})
  },
  // 获取本地存储的数据-同步
  getStorageSync() {
    // 从本地存储的数据中获取指定 key 的数据内容
    const num = wx.getStorageSync('numSync')
    const obj = wx.getStorageSync('objSync')
    console.log(num)
    console.log(obj)
  },
  // 删除本地存储的数据-同步
  removeStorageSync() {
    // 从本地存储的数据中删除指定 key 的数据内容
    wx.removeStorageSync('numSync')
  },
  // 清空本地存储的全部数据-同步
  clearStorageSync() {
    wx.clearStorageSync()
  },
  // 将数据存储到本地-异步
  setStorage() {
    wx.setStorage({
      key: 'num',
      data: 10
    })
    wx.setStorage({
      key: 'obj',
      data: { name: 'jerry', age: 18}
    } )
  },
  // 获取本地存储的数据-异步
  // async、await 等待出现数据,否则获取到的数据可能是空的
  async getStorage() {
    const { data } = await wx.getStorage({
      key: 'obj'
    })    
    console.log(data)
  },
  // 删除本地存储的数据-异步
  removeStorage() {
    // 从本地存储的数据中删除指定 key 的数据内容
    wx.removeStorage({
      key: 'num'
    })
  },
  // 清空本地存储的全部数据-异步
  clearStorage() {
    wx.clearStorage()
  }

四、小程序 API -路由与通信

小程序实现页面的跳转,有两种方式:
1、声明式导航: navigator 组件,详情见:微信小程序开发-各组件
2、编程式导航:使用小程序提供的 API

  • 2.1、路径后可以带参数,参数和路径之间用 ? 分隔,参数键和参数值用 = 相连,不同参数用 & 分隔,例如:path?key=value&key2=value2
  • 2.2、参数需要在跳转到的页面的 onLoad 钩子函数中通过形参进行接收


wxml 文件代码示例:

<button type="warn" plain bind:tap="navigateTo">navigateTo</button>
<button type="primary" plain bind:tap="redirectTo">redirectTo</button>
<button type="warn" plain bind:tap="switchTab">switchTab</button>
<button type="warn" plain bind:tap="reLaunch">reLaunch</button>

js 文件代码示例:

  navigateTo(){
    // 保留当前页面,跳转到应用中其他页面,不能跳转到 tabbar 页面
    wx.navigateTo({
      url: '/pages/list/list?id=1&name=tom',
    })
  },
  redirectTo(){
    // 销毁当前页面,跳转到应用中其他页面,不能跳转到 tabbar 页面
    wx.redirectTo({
      url: '/pages/list/list?id=1&name=tom',
    })
  },
  switchTab(){
   // 隐藏当前页面,跳转到tabbar 页面,不能跳转到非 tabbar 页面,路径后面不能带参数
   wx.switchTab({
     url: '/pages/cart/cart',
   })
  },
  reLaunch(){
   // 关闭所有页面,然后跳转到应用内某一页面
   wx.reLaunch({
     url: '/pages/cart/cart?id=1&name=tom',
   })
  }

list.wxml 文件代码示例:

<button type="primary" plain bind:tap="navigateBack">navigateBack</button>

list.js 文件代码示例:

  navigateBack(){
    //关闭当前页面,返回上一页或返回多级页面,默认返回上一页
    wx.navigateBack({
      delta: 1
    })
  }

五、小程序 API -上拉加载 & 下拉刷新

上拉加载是小程序常见的一种加载方式,当用户滑到页面底部时,会自动加载更多的内容,方便用户继续浏览,小程序中实现上拉加载的方式:

  • 1、在 app.json 的 window 选项中 或 page.json 中配置距离页面底部的距离:onReachBottomDistance;默认 50 rpx
  • 2、在 page.js 中定义 onReachBottom 事件监听用户上拉加载

下拉刷新是小程序中常见的一种刷新方式,当用户下拉页面时,页面会自动刷新,以便用户获取最新内容,小程序中实现下拉刷新的方式:

  • 1、在 app.json 的 window 选项中或 page.json 中开启允许下拉,同时可配置窗口、loading 样式等
  • 2、在 page.js 中定义 onPullDownRefresh 事件监听用户下拉动作

注意事项: onReachBottom 和onPullDownRefresh是项目创建时,小程序就自己给我们生成了,所以 js 页面后面的 onReachBottom 和onPullDownRefresh会覆盖掉我们前面写的 onReachBottom 和 onPullDownRefresh,导致最后无法出现效果
.json 文件代码示例:

{
  "usingComponents": {},
  "onReachBottomDistance": 100,
  "enablePullDownRefresh": true,
  "backgroundTextStyle":"light",
  "backgroundColor": "#efefef"
}

.js 文件代码示例:

data: {
    numList: [1, 2, 3]
  },
  onReachBottom() {
    console.log('监听用户上拉加载')
    wx.showLoading({
      title: '数据加载中',
    })
    setTimeout(()=>{
      // 用户上拉加载时,需要对数字进行累加,每次累加 3 个数字
      // 获取数组最后一项 n, n + 1, n + 2, n + 3
      const lastNum = this.data.numList[this.data.numList.length -   1]
      const newArr = [lastNum + 1,lastNum + 2,lastNum + 3]
      this.setData({
        numList:[...this.data.numList, ...newArr]
      })
      wx.hideLoading()
    },1500)
  },
  onPullDownRefresh() {
    console.log('监听用户下拉刷新')
    // 当用户上拉加载更多后,如果用户进行了下拉刷新,需要将数据重置
    this.setData({
      numList:[1, 2, 3]
    })
    // 在下拉刷新后,loading 效果有可能不会回弹回去,需要处理
    if (this.data.numList.length == 3){
      wx.stopPullDownRefresh()
    }
  }

.scss 文件代码示例:

view {
  height: 500rpx;
  display: flex;
  align-items: center;
  justify-content: center;
}
view:nth-child(odd){
  background-color: lightskyblue;
}
view:nth-child(even){
  background-color: lightcoral;
}

.wxml 文件代码示例:

<view wx:for="{{ numList }}" wx:key="*this">{{ item }}</view>

六、小程序 API -拓展-增强 scroll-view

使用 scroll-view 实现上拉加载和下拉刷新功能:

  • lower-threshold 是针对 scroll-view 的配置,onReachBottomDistance 是针对整个页面的配置,都是距离底部多少距离触发上拉加载
  • bindscrolltolower 是 scroll-view 配置上拉加载事件处理函数
  • enable-back-to-top 是 scroll-view 滚动条返回顶部的配置
  • refresher-enabled 是 scroll-view 是否允许下拉刷新配置
  • refresher-default-style 是 scroll-view 下拉刷新样式配置
  • refresher-background 是 scroll-view 下拉刷新背景颜色的配置
  • bindrefresherrefresh 是 scroll-view 下拉刷新事件处理函数
  • refresher-triggered 是 scroll-view 下拉刷新当前状态配置

.js 文件代码示例:

data: {
    numList:[1, 2, 3]
  },
  // scroll-view 上拉加载事件处理函数
  getMore() {
    console.log('scroll-view 监听用户上拉加载')
    wx.showLoading({
      title: '数据加载中',
    })
    setTimeout(()=>{
      // 用户上拉加载时,需要对数字进行累加,每次累加 3 个数字
      // 获取数组最后一项 n, n + 1, n + 2, n + 3
      const lastNum = this.data.numList[this.data.numList.length -   1]
      const newArr = [lastNum + 1,lastNum + 2,lastNum + 3]
      this.setData({
        numList:[...this.data.numList, ...newArr]
      })
      wx.hideLoading()
    },1500)
  },
  // scroll-view 下拉刷新事件处理函数
  refreshHandler() {
    console.log('监听用户下拉刷新')
    // 当用户上拉加载更多后,如果用户进行了下拉刷新,需要将数据重置
    wx.showToast({
      title: '下拉刷新',
    })
    this.setData({
      numList:[1, 2, 3],
      isTriggered: false
    })
  }

.scss 文件代码示例:

.scroll-y {
  height: 100vh;
  background-color: blanchedalmond;
}
view{
  height: 500rpx;
  display: flex;
  align-items: center;
  justify-content: center;
}
view:nth-child(odd) {
  background-color: skyblue;
}
view:nth-child(even) {
  background-color:pink;
}

.wxml 文件代码示例:

<scroll-view 
 scroll-y 
 class="scroll-y"
 lower-threshold="100"
 bindscrolltolower="getMore"
 enable-back-to-top
 refresher-enabled
 refresher-default-style="black"
 refresher-background="#efefef"
 bindrefresherrefresh="refreshHandler"
 refresher-triggered="{{ isTriggered }}"
>
 <view wx:for="{{ numList }}" wx:key="*this">{{ item }}</view>
</scroll-view>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值