微信小程序——花坊项目

1:wx.showToast()基本使⽤。

wx.showToast() 消息提示框是在项⽬中频繁使⽤的⼀个⼩程序 API ,常⽤来给⽤户进⾏消息提示反馈。使⽤⽅式如下:

1 // app.js
2
3 App({
4 // ⻚⾯显示⽣命周期函数
5 onShow(){
6 wx.showToast({
7 title: '消息提示框', // 提示的内容
8 icon: 'success', // 提示的图标,success(成功)、error(失败)、loading(加
载)、none(不显示图标)
9 duration: 2000, // 提示的延迟时间
10 mask: true // 是否显示透明蒙层,防⽌触摸穿透
11 })
12 
13 }
14
15 // ⽣命周期函数
16 // 在使⽤Page()构造⻚⾯时,需要使⽤⽣命周期函数。
17 // onLoad:⻚⾯加载时⽣命周期函数。
18 // onShow:⻚⾯显示⽣命周期函数。每次打开⻚⾯时都会调⽤⼀次。⻚⾯显示/切⼊前台前触发。
19 // onReady:⻚⾯初次渲染完成⽣命周期函数。⻚⾯初次渲染完成时触发。
20 // onHide:⻚⾯隐藏⽣命周期函数。如⻚⾯之间跳转或通过底部Tab切换到其他⻚⾯,⼩程序切⼊后
台。
21 // onUnload:⻚⾯卸载⽣命周期函数。⻚⾯卸载时触发,如⻚⾯跳转或者返回到之前的⻚⾯时。
22
23 })

2:为什么要进⾏模块封装

如果每次使⽤的时候,都直接调⽤这些 API ,会导致代码很冗余,为了减少了代码冗余,我们需要将 这些 API 封装成公共⽅法

3:封装思路

a:创建⼀个 toast ⽅法对 wx.showToast() ⽅法进⾏封装
b:调⽤该⽅法时,传递对象作为参数
如果没有传递任何参数,设置⼀个空对象 {} 作为默认参数
从对象中包含 title 、 icon 、 duration 、 mask 参数,并给参数设置默认值

 const toast = ({ title = " 数据加载中 " , icon = "none" , duration = 2000 , mask = true } = {}) =>
{
 wx . showToast ({
 title ,
 icon ,
 duration ,
 mask
 })
 }

3:封装思路
对 wx.showModal() ⽅法进⾏封装, 封装后的新⽅法叫 modal。
调⽤该⽅法时,传递对象作为参数,对象的参数同 wx.showModal() 参数⼀致。
封装的 modal ⽅法的内部通过 Promise 返回⽤户执⾏的操作(确定和取消,都通过 resolve 返
回)。
在需要显示模态对话框的时候调⽤ modal ⽅法,并传⼊相关的参数,有三种调⽤⽅式:
不传递参数,使⽤默认参数。
传递参数,覆盖默认的参数

4:调⽤⽅式
新封装的本地存储模块,我们依然希望有两种调⽤的⽅式:
模块化的⽅式导⼊使⽤
将封装的模块挂载到 wx 全局对象身上
实现步骤:
在 extendApi.js ⽂件中新建 modal ⽅法,⽅法内部modal ⽅法,⽅法内部⽤来处理封装的逻辑

网络请求封装

1、请求封装-request方法

// request.js
 
// 1.使用了微信自带的请求api wx.request
// 2.将wx.request封装到了一个名为request的函数中
// 3.将函数封装到了一个名为WxRequest的类中
 
// 创建一个WxRequest类
// 通过类的方式进行封装,会让代码更具有复用性
// 也可以方便添加新的属性和方法
 
class WxRequest {
 
  // 默认参数对
  defaults = {
    // 请求基地址
    baseURL: '',
    // 服务器接口地址
    url: '',
    // 请求方式
    method: 'GET',
    // 请求参数
    data: null,
    // 请求头:
    header: {
      'Content-type': 'application/json' // 设置数据的交互格式
    },
    // 默认超时时间为一分钟
    timeout: 60000
  }
 
  // 定义拦截对象,包括请求拦截器和响应拦截方法, 方便在请求或响应之前进行处理
  interceptors = {
    // 请求拦截器
    request: (config) => config,
    // 响应拦截器
    response: (response) => response
  }
  // 用于创建和初始化类的属性和方法
  // params为用户传入的请求配置项
  constructor(params = {}) {
    // 使用Object.assign方法合并默认参数以及传递的请求参数
    // 需要传入的参数,会覆盖默认的参数,因此传入的参数放在最后
    this.defaults = Object.assign({}, this.defaults, params)
  }
 
  // request实例方法接受一个对象类型的参数
  request(options) {
    // 拼接完整的请求路径
    options.url = this.defaults.baseURL + options.url
    // 合并请求参数
    options = {
      ...this.defaults,
      ...options
    }
 
    // 发送请求之前发送一个loading
    wx.showLoading({})
 
    // 在发送请求之前调用请求拦截器
    options = this.interceptors.request(options)
 
    console.log(options);
 
    return new Promise((resolve, reject) => {
 
      wx.request({
 
        // 使用拓展运算符将request函数传来的对象参数展开
        ...options,
 
        //当接口调用成功就会触发success回调函数
        success: (res) => {
 
          // 不管接口成功还是失败,都需要调用响应拦截器
          // 响应拦截器需要接受服务器响应的数据,然后对数据进行逻辑处理,处理好后进行返回
 
          // 再给响应拦截器传递参数时,需要将请求参数也一起上传
          // 方便进行代码的调试或者其他逻辑处理,所以需要合并参数
          // 然后将合并的参数给响应拦截器
 
          // 第一个参数:需要合并的目标对象
          // 第二个参数:服务器响应的数据
          // 第三个参数:请求配置以及自定义属性
 
          //不管是请求失败还是请求成功,都会将响应的数据传递给响应拦截器
          //这个时候合并参数时,就需要追加一个属性:isSuccess
          //如果属性值为true.说明执行了success同调函数
          const mergetRes = Object.assign({}, res, {
            config: options,
            isSuccess: true
          })
 
          // resolve(res)
          resolve(this.interceptors.response(mergetRes))
        },
 
        // 当接口调用失败的时候会触发fail回调函数
        fail: (err) => {
          //如果属性值为false,说明执行了fail回调函数
          const mergetErr = Object.assign({}, err, {
            config: options,
            isSuccess: true
          })
          // reject(err)
          reject(this.interceptors.response(mergetErr))
        },
 
        //不管promise请求是否成功,
        //都会执行complete里面的内容
        complete:()=> {
          //接口调用完成后隐藏loading
          wx.hideLoading()
        },
 
        // 当接口调用失败时会触发fail回调函数
        fail: (err) => {
          //如果属性值为false,说明执行了fail回调函数
          const mergetErr = Object.assign({}, err, {
            config: options,
            isSuccess: false
 
          })
          // reject(err)
          reject(this.interceptors.response(mergetErr))
        }
      })
    })
  }
  //封装GET实例方法
  get(url, data = {}, config = {}) {
    return this.request(Object.assign({
      url,
      data,
      method: 'GET',
      config
    }))
  }
 
  // 封装POST实例方法
  post(url, data = {}, config = {}) {
    return this.request(Object.assign({
      url,
      data,
      method: 'POST',
      config
    }))
  }
 
  // 封装PUT实例方法
  put(url, data = {}, config = {}) {
    return this.request(Object.assign({
      url,
      data,
      method: 'PUT',
      config
    }))
  }
 
  // 封装DELETE实例方法
  delete(url, data = {}, config = {}) {
    return this.request(Object.assign({
      url,
      data,
      method: 'DELETE',
      config
    }))
  }
 
  // 用来处理并发请求
  all(...promise){
 
    // 通过展开运算符接受传递的参数
    //展开运算符会将传入的参数转为数组
 
    console.log(promise);
    return Promise.all(promise)
  }
}
export default WxRequest
 
 

使用request方法

<view class="box">
  <!-- 设置一个按钮 并给按钮设置一个名为handler的点击事件 点击按钮则会发送请求 -->
  <button type="warn" size="mini" plain bindtap="handler">测试发送请求</button>
 
  <button type="primary" size="mini" plain bindtap="handler1">测试发送请求</button>
 
  <button type="primary" size="mini" plain bindtap="AllHandler">测试发送请求</button>
</view>

设置请求的参数

  // 默认参数对像
  defaults = {
    // 请求基地址
    baseURL: '',
    // 服务器接口地址
    url: '',
    // 请求方式
    method: 'GET',
    // 请求参数
    data: null,
    // 请求头:
    header: {
      'Content-type': 'application/json' // 设置数据的交互格式
    },
    // 默认超时时间为一分钟
    timeout: 60000
  }

请求封装的快捷方法

//封装GET实例方法
  get(url, data = {}, config = {}) {
    return this.request(Object.assign({
      url,
      data,
      method: 'GET',
      config
    }))
  }
 
  // 封装POST实例方法
  post(url, data = {}, config = {}) {
    return this.request(Object.assign({
      url,
      data,
      method: 'POST',
      config
    }))
  }
 
  // 封装PUT实例方法
  put(url, data = {}, config = {}) {
    return this.request(Object.assign({
      url,
      data,
      method: 'PUT',
      config
    }))
  }
 
  // 封装DELETE实例方法
  delete(url, data = {}, config = {}) {
    return this.request(Object.assign({
      url,
      data,
      method: 'DELETE',
      config
    }))
  }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值