当前位置:   article > 正文

小程序系统API 调用_微信小程序api接口调用

微信小程序api接口调用


一、网络请求API 和封装  wx.request (Object object)

​​​​​​ RequestTask | 微信开放文档

1.1 API 参数

1.2 API 使用

 

 1.3 网络请求--API 封装

  • 使用 promise 包装成函数
    1. export function MyRequest(options) {
    2. return new Promise((resolve, reject) => {
    3. wx.request({
    4. ...options,
    5. success: (res) => {
    6. resolve(res.data)
    7. },
    8. fail: reject
    9. })
    10. })
    11. }
  • 封装成类 ,再实例化  (封装 baseURL 、get、post
    1. class MyRequest {
    2. constructor(baseURL) {
    3. this.baseURL = baseURL
    4. }
    5. request(options) {
    6. const { url } = options
    7. return new Promise((resolve, reject) => {
    8. wx.request({
    9. ...options,
    10. url: this.baseURL + url,
    11. success: (res) => {
    12. resolve(res.data)
    13. },
    14. fail: (err) => {
    15. console.log("err:", err);
    16. }
    17. })
    18. })
    19. }
    20. get(options) {
    21. return this.request({ ...options, method: "get" })
    22. }
    23. post(options) {
    24. return this.request({ ...options, method: "post" })
    25. }
    26. }
    27. export const myReqInstance = new MyRequest("http://codercba.com:1888/api")
  • 使用封装的函数和类
  1. import { myRequest, myReqInstance } from "../../service/index"
  2. Page({
  3. data: {
  4. allCities: {},
  5. houselist: [],
  6. currentPage: 1
  7. },
  8. async onLoad() {
  9. // 1.网络请求基本使用
  10. // wx.request({
  11. // url: "http://codercba.com:1888/api/city/all",
  12. // success: (res) => {
  13. // const data = res.data.data
  14. // this.setData({ allCities: data })
  15. // },
  16. // fail: (err) => {
  17. // console.log("err:", err);
  18. // }
  19. // })
  20. // wx.request({
  21. // url: 'http://codercba.com:1888/api/home/houselist',
  22. // data: {
  23. // page: 1
  24. // },
  25. // success: (res) => {
  26. // const data = res.data.data
  27. // this.setData({ houselist: data })
  28. // }
  29. // })
  30. // 2.使用封装的函数
  31. // myRequest({
  32. // url: "http://codercba.com:1888/api/city/all"
  33. // }).then(res => {
  34. // this.setData({ allCities: res.data })
  35. // })
  36. // myRequest({
  37. // url: "http://codercba.com:1888/api/home/houselist",
  38. // data: {
  39. // page: 1
  40. // }
  41. // }).then(res => {
  42. // this.setData({ houselist: res.data })
  43. // })
  44. // 3.await/async 书写方便,但性能不高,会阻塞后面的网络请求
  45. // const cityRes = await myRequest({
  46. // url: "http://codercba.com:1888/api/city/all"
  47. // })
  48. // this.setData({ allCities: cityRes.data })
  49. // const houseRes = await myRequest({
  50. // url: "http://codercba.com:1888/api/home/houselist",
  51. // data: { page: 1 }
  52. // })
  53. // this.setData({ houselist: houseRes.data })
  54. // 4.将请求封装到一个单独函数中(推荐) 异步函数执行不会阻塞后面的运行
  55. this.getCityData()
  56. this.getHouselistData()
  57. // 5.使用类的实例发送请求
  58. myReqInstance.get({
  59. url: "/city/all"
  60. }).then(res => {
  61. console.log(res);
  62. })
  63. },
  64. async getCityData() {
  65. const cityRes = await myRequest({
  66. url: "http://codercba.com:1888/api/city/all"
  67. })
  68. this.setData({ allCities: cityRes.data })
  69. },
  70. async getHouselistData() {
  71. const houseRes = await myRequest({
  72. url: "http://codercba.com:1888/api/home/houselist",
  73. data: { page: this.data.currentPage }
  74. })
  75. const finalHouseList = [...this.data.houselist, ...houseRes.data]
  76. this.setData({ houselist: finalHouseList })
  77. // 思考: 为什么这里不需要setData?
  78. // 修改currentPage数据,并不需要页面刷新
  79. this.data.currentPage++
  80. },
  81. //上拉加载更多
  82. onReachBottom() {
  83. this.getHouselistData()
  84. }
  85. })

二、展示弹窗和页面分享

2.1  展示弹窗

  • showToast 显示消息提示框 

wx.showToast(Object object) | 微信开放文档

  •  showModal 显示模态对话框

wx.showModal(Object object) | 微信开放文档

  •  showLoading  显示 loading 提示框。 需主动调用 wx.hideLoading 关闭提示框

wx.showLoading(Object object) | 微信开放文档

  •  showActionSheet 显示操作菜单

wx.showActionSheet(Object object) | 微信开放文档

注意

2.2 页面分享

  1. onShareAppMessage() {
  2. return {
  3. title: "旅途的内容",
  4. path: "/pages/favor/favor",
  5. imageUrl: "/assets/nhlt.jpg"
  6. }
  7. },

三、设备信息和位置信息

3.1 获取设备信息 wx.getSystemInfo(Object object) | 微信开放文档

  1. wx.getSystemInfo({
  2. success (res) {
  3. console.log(res.model)
  4. console.log(res.pixelRatio)
  5. console.log(res.windowWidth)
  6. console.log(res.windowHeight)
  7. console.log(res.language)
  8. console.log(res.version)
  9. console.log(res.platform)
  10. }
  11. })

3.2 获取位置信息 wx.getLocation(Object object) | 微信开放文档

获取用户授权  全局配置 | 微信开放文档

四、小程序Storage 存储 

encryptBoolean默认值false非必填
是否开启加密存储。只有异步的 setStorage 接口支持开启加密存储。开启后,将会对 data 使用 AES128 加密,接口回调耗时将会增加。若开启加密存储,setStorage 和 getStorage 需要同时声明 encrypt 的值为 true。此外,由于加密后的数据会比原始数据膨胀1.4倍,因此开启 encrypt 的情况下,单个 key 允许存储的最大数据长度为 0.7MB,所有数据存储上限为 7.1MB

五、页面跳转和数据传递

5.1 页面跳转

5.1.1  navigator 组件  navigator | 微信开放文档

5.1.2 wx 的 API

路由跳转API功能描述
跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面
关闭所有页面,打开到应用内的某个页面

关闭当前页面,跳转到应用内的某个页面。但是不允许跳转到 tabbar 页面。

保留当前页面,跳转到应用内的某个页面。但是不能跳到 tabbar 页面。使用 wx.navigateBack 可以返回到原页面。小程序中页面栈最多十层。

关闭当前页面,返回上一页面或多级页面。可通过 getCurrentPages 获取当前的页面栈,决定需要返回几层。

 5.2 数据传递

 

给上一级页面传递数据

1. 获取到上一个页面的实例, 通过setData给上一个页面设置数据  

  • 将返回上一级页面的数据传递过程写在 onUnload() 中,可以将小程序自带的返回导航功能重写实现参数传递
  • 不要在 App.onLaunch 的时候调用 getCurrentPages(),此时 page 还没有生成。
  • 不要尝试修改页面栈,会导致路由以及页面状态错误。
  • getCurrentPages 获取当前页面栈。数组中第一个元素为首页,最后一个元素为当前页

2. 回调events的函数 EventChannel | 微信开放文档 

给下一级页面传递数据

  1. Page({
  2. data: {
  3. name: "kobe",
  4. age: 30,
  5. message: "哈哈哈"
  6. },
  7. onNavTap() {
  8. const name = this.data.name
  9. const age = this.data.age
  10. // 页面导航操作
  11. wx.navigateTo({
  12. // 跳转的过程, 传递一些参数过去
  13. url: `/pages2/detail/detail?name=${name}&age=${age}`,
  14. events: {
  15. backEvent(data) {
  16. console.log("back:", data);
  17. },
  18. coderwhy(data) {
  19. console.log("why:", data);
  20. }
  21. }
  22. })
  23. }
  24. })

  1. Page({
  2. data: {
  3. name: "",
  4. age: 0
  5. },
  6. // onLoad 的参数中获取打开当前页面路径中的参数。
  7. onLoad(options) {
  8. console.log(options);
  9. const name = options.name
  10. const age = options.age
  11. this.setData({ name, age })
  12. // const eventChannel = this.getOpenerEventChannel()
  13. },
  14. onBackTap() {
  15. // 1.返回导航
  16. wx.navigateBack()
  17. // 2.方式一: 给上一级的页面传递数据
  18. // 2.1. 获取到上一个页面的实例
  19. // const pages = getCurrentPages()
  20. // const prePage = pages[pages.length-2]
  21. // // 2.2.通过setData给上一个页面设置数据
  22. // prePage.setData({ message: "呵呵呵" })
  23. // 3.方式二: 回调events的函数
  24. // 3.1. 拿到eventChannel
  25. const eventChannel = this.getOpenerEventChannel()
  26. // 3.2. 通过eventChannel回调函数
  27. eventChannel.emit("backEvent", { name: "back", age: 111 })
  28. eventChannel.emit("coderwhy", { name: "why", age: 10 })
  29. },
  30. onUnload() {
  31. // // 2.1. 获取到上一个页面的实例
  32. // const pages = getCurrentPages()
  33. // const prePage = pages[pages.length-2]
  34. // // 2.2.通过setData给上一个页面设置数据
  35. // prePage.setData({ message: "呵呵呵" })
  36. }
  37. })

六. 小程序登录流程演练

  • 小程序登录流程 :

    1.通过wx.login()获取code

    2.将这个code发送给后端,后端会返回一个token,这个token将作为身份的唯一标识

    3.将token通过 wx.setStorageSync() 保存在本地存储

    4.用户下次进入页面时,会先通过wx.getStorageSync() 方法判断token是否有值且未过期,如果有值且未过期,则可以请求其它数据,如果没有值或者token失效,则进行登录操作

  1. Page({
  2. // onLoad登录的流程
  3. async onLoad() {
  4. // 1.获取token, 判断token是否有值
  5. const token = wx.getStorageSync('token') || ""
  6. // 2.判断token是否过期
  7. const res = await myLoginReqInstance.post({
  8. url: "/auth",
  9. header: {
  10. token: token
  11. }
  12. })
  13. // console.log(res);
  14. // 2.如果token有值
  15. if (token && res.message === "已登录") {
  16. console.log("请求其他的数据");
  17. } else {
  18. this.handleLogin()
  19. }
  20. },
  21. async handleLogin() {
  22. // 1.获取code
  23. const code = await getCode()
  24. // 2.使用code换取token
  25. const res = await myLoginReqInstance.post({
  26. url: "/login",
  27. data: { code }
  28. })
  29. // 3.保存token
  30. wx.setStorageSync('token', res.token)
  31. }
  32. // handleLogin() {
  33. // // 1.获取code
  34. // wx.login({
  35. // success: (res) => {
  36. // const code = res.code
  37. // // 2.将这个code发送自己的服务器(后端)
  38. // wx.request({
  39. // url: "http://123.207.32.32:3000/login",
  40. // data: {
  41. // code
  42. // },
  43. // method: "post",
  44. // success: (res) => {
  45. // const token = res.data.token
  46. // wx.setStorageSync('token', token)
  47. // }
  48. // })
  49. // }
  50. // })
  51. // }
  52. })

 封装 getCode

  1. // /service/login.js
  2. export function getCode() {
  3. return new Promise((resolve, reject) => {
  4. wx.login({
  5. success: (res) => {
  6. resolve(res.code)
  7. },
  8. fail: reject
  9. })
  10. })
  11. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/568498
推荐阅读
相关标签
  

闽ICP备14008679号