微信小程序 --- 通用模块封装(showToast,showModal ,本地存储)

目录

01. 为什么进行模块封装

02. 消息提示模块封装

03. 模态对话框封装

04. 封装本地存储 API

05. 拓展:封装异步存储API+优化代码


01. 为什么进行模块封装

在进行项目开发的时候,我们经常的会频繁的使用到一些 API,

例如:wx.showToast() 、wx.showModal()等消息提示 API ,这些 API 的使用方法如下:

wx.showToast({
  title: '消息提示框', // 提示的内容
  icon: 'success',   // 提示图标
  duration: 2000,	 // 提示的延迟时间
  mask: true		 // 是否显示透明蒙层,防止触摸穿透
})

wx.showModal({
  title: '提示', // 提示的标题
  content: '您确定执行该操作吗?', // 提示的内容
  confirmColor: '#f3514f', // 确定按钮的样式
  // 接口调用结束的回调函数(调用成功、失败都会执行)
  complete({ confirm, cancel }) {
    if (confirm) {
      console.log('用户点击了确定')
      return
    }

    if (cancel) {
      console.log('用户点击了取消')
    }
  }
})

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

// wx.showToast() 封装后的调用方式
toast()
toast({ title: '数据加载失败....', mask: true })

// wx.showModal() 封装后的调用方式
const res = await modal({
  title: '提示',
  content: '鉴权失败,请重新登录 ?'
})

// 用户点击了确定
if (res) { ... } else { ... }

可以看到封装后方法,极大简化 API 的调用,

同时,我们在后续还会进行网络通用模块的封装,如果直接进行封装难度比较大,

进行通过模块的封装,也是为后续 [网络请求封装] 做铺垫。

02. 消息提示模块封装

基本使用:

wx.showToast() 消息提示框是在项目中频繁使用的一个小程序 API,常用来给用户进行消息提示反馈。使用方式如下:

wx.showToast({
  title: '消息提示框', // 提示的内容
  icon: 'success',   // 提示的图标,success(成功)、error(失败)、loading(加载)、none(不显示图标)
  duration: 2000,	 // 提示的延迟时间
  mask: true		 // 是否显示透明蒙层,防止触摸穿透
})

封装思路:

  1. 创建一个 toast 方法对 wx.showToast() 方法进行封装

  2. 调用该方法时,传递对象作为参数

    • 如果没有传递任何参数,设置一个空对象 {} 作为默认参数

    • 从对象中包含 titleicondurationmask 参数,并给参数设置默认值

  3. 在需要显示弹出框的时候调用 toast 方法,并传入相关的参数,有两种参数方式:

    • 不传递参数,使用默认参值
    • 传入部分参数,覆盖默认的参数

调用方式:

新封装的模块,我们希望有两种调用的方式:

模块化的方式导入使用

import { toast } from './extendApi'

toast()
toast({ title: '数据加载失败....', mask: true })

将封装的模块挂载到 wx 全局对象身上

wx.toast()
wx.toast({ title: '数据加载失败....', mask: true })

实现步骤:

  1. 在 utils 目录下新建 extendApi.js 文件
  2. 对 wx.showToast() 方法进行封装

落地代码:

➡️ utils/extendApi.js

/**
 * @description 封装消息提示组件
 * @param {*} title 提示的内容
 * @param {*} icon 图标
 * @param {*} duration 提示的延迟时间
 * @param {*} mask 是否显示透明蒙层,防止触摸穿透
 */
const toast = ({ title = '数据加载中', icon = 'none', mask = true, duration = 3000 } = {}) => {
  wx.showToast({
    title,
    icon,
    mask,
    duration
  })
}

// 在 wx 全局对象上封装 toast 方法
// 调用 API 方式:
// 1. 在入口文件 app.js 导入封装的模块  import './utils/extendApi'
// 2. 调用封装的方法:wx.toast('')
wx.toast = toast

// 模块化的方式使用
// 调用 API 方式:
// 1. 导入该文件:import { toast } from '../utils/extendApi'
// 2. 调用封装的方法:toast('')
export { toast }

➡️ app.js

import { toast } from './utils/extendApi'

App({
  onLaunch() {

    // 第一种调用方式:不传入任何参数
    toast()

    // 第二种调用方式:传入部分参数
    toast({ title: '数据加载失败....', mask: true })
    
    // 第三种调用方式:传入全部的参数
    toast({ title: '数据加载失败....', mask: true })
    
  }
})

03. 模态对话框封装

基本使用:

wx.showModal() 模态对话框也是在项目中频繁使用的一个小程序 API,通常用于向用户询问是否执行一些操作,例如:询问用户是否真的需要退出、是否确认删除等等

wx.showModal({
  title: '提示', // 提示的标题
  content: '您确定执行该操作吗?', // 提示的内容
  confirmColor: '#f3514f',
  // 接口调用结束的回调函数(调用成功、失败都会执行)
  complete({ confirm, cancel }) {
    confirm && console.log('点击了确定')
    cancel && console.log('点击了取消')
  }
})

封装思路:

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

调用方式:

新封装的本地存储模块,我们依然希望有两种调用的方式:

  1. 模块化的方式导入使用
  2. 将封装的模块挂载到 wx 全局对象身上

实现步骤:

  1. 在 extendApi.js 文件中新建 modal 方法,方法内部
  2. modal 方法,方法内部用来处理封装的逻辑

落地代码:

➡️ utils/extendApi.js

// coding...

/**
 * @description 封装 wx.showModal  方法
 * @param {*} options 同 wx.showModal 配置项
 */
export const modal = (options = {}) => {
  // 使用 Promise 处理 wx.showModal 的返回结果
  return new Promise((resolve) => {

    // 默认的参数
    const defaultOpt = {
      title: '提示',
      content: '您确定执行该操作吗?',
      confirmColor: '#f3514f',
    }

    // 将传入的参数和默认的参数进行合并
    const opts = Object.assign({}, defaultOpt, options)

    wx.showModal({
      // 将合并的参数赋值传递给 showModal 方法
      ...opts,
      complete({ confirm, cancel }) {
        // 如果用户点击了确定,通过 resolve 抛出 true
        // 如果用户点击了取消,通过 resolve 抛出 false
        confirm && resolve(true)
        cancel && resolve(false)
      }
    })
  })
}

// 在 wx 全局对象上封装 myToast 方法
// 调用 API 方式:
// 1. 在入口文件 app.js 导入封装的模块  import './utils/extendApi'
// 2. 调用封装的方法:wx.toast('')
wx.toast = toast
+ wx.modal = modal

// 模块化的方式使用
// 调用 API 方式:
// 1. 导入该文件:import { toast } from '../utils/extendApi'
// 2. 调用封装的方法:toast('')
+ export { toast, modal }

➡️ app.js

import { modal } from './utils/extendApi'

App({
  async onLaunch() {
      
    // 第一种调用方式:不传入任何参数
    // 不使用任何参数,使用默认值
    const res = await modal()
    console.log(res)

    // 第二种调用方式:更改默认配置
    const res = await modal({
      content: '鉴权失败,请重新登录',
      showCancel: false
    })
    console.log(res)
  }
})

04. 封装本地存储 API

思路分析:

在小程序中,经常需要将一些数据存储到本地,方便多个页面的读取使用,例如:将用户的登录状态、用户的个人信息存储到本地。

小程序提供了同步、异步两类 API 来实现本地存储操作。例如: wx.setStorageSyncwx.setStorage 等方法

try {
  wx.setStorageSync(key, value)
} catch (err) {
  console.error(`存储指定 ${key} 数据发生错误:`, err)
}

wx.setStorage({
  key: 'key',
  data: 'data',
  success (res) => {},
  fail (err) => {}
})

如果直接使用这些 API,会比较麻烦,通常情况下,我们需要对本地存储的方法进行封装。

实现步骤:

  1. 在 utils 目录下新建 storage.js 文件
  2. 在该文件中,封装对本地数据进行 存储、获取、删除、清除的方法

落地代码:

➡️ utils/storage.js

/**
 * @description 存储数据
 * @param {*} key 本地缓存中指定的 key
 * @param {*} value 需要缓存的数据
 */
export const setStorage = (key, value) => {
  try {
    wx.setStorageSync(key, value)
  } catch (e) {
    console.error(`存储指定 ${key} 数据发生错误:`, e)
  }
}

/**
 * @description 从本地读取对应 key 的数据
 * @param {*} key 
 */
export const getStorage = (key) => {
  try {
    const value = wx.getStorageSync(key)
    if (value) {
      return value
    }
  } catch (e) {
    console.error(`获取指定 ${key} 数据发生错误:`, e)
  }
}

/**
 * @description 从本地移除指定 key 数据
 * @param {*} key 
 */
export const removeStorage = (key) => {
   try {
     wx.removeStorageSync(key)
   } catch (err) {
     console.error(`移除指定 ${key} 数据发生错误:`, e)
   }
}

/**
 * @description 从本地清空全部的数据
 */
export const clearStorage = () => {
  try {
    wx.clearStorageSync()
  } catch (e) {
    console.error("清空本地存储时发生错误:", e);
  }
}

05. 拓展:封装异步存储API+优化代码

思路分析:

使用 Promise 封装异步存储 API

wx.setStorage({
  key: 'key',
  data: 'data',
  success(res) {},
  fail(err) {},
  complete(res) {}
})

使用方式:

// 异步将数据存储到本地
asyncSetStorage(key, data)

// 异步从本地读取指定 key 的数据
asyncGetStorage(key)

// 异步从本地移除指定 key 的数据
asyncRemoveStorage(key)

// 异步从本地移除、清空全部的数据
asyncClearStorage()

落地代码:

➡️ utils/storage.js


/**
 * @description 将数据存储到本地 - 异步方法
 * @param {*} key 本地缓存中指定的 key
 * @param {*} data 需要缓存的数据
 */
export const asyncSetStorage = (key, data) => {
  return new Promise((resolve) => {
    wx.setStorage({
      key,
      data,
      complete(res) {
        resolve(res)
      }
    })
  })
}

/**
 * @description 从本地读取指定 key 的数据 - 异步方法
 * @param {*} key
 */
export const asyncGetStorage = (key) => {
  return new Promise((resolve) => {
    wx.getStorage({
      key,
      complete(res) {
        resolve(res)
      }
    })
  })
}

/**
 * @description 从本地移除指定 key 的数据 - 异步方法
 * @param {*} key
 */
export const asyncRemoveStorage = (key) => {
  return new Promise((resolve) => {
    wx.removeStorage({
      key,
      complete(res) {
        resolve(res)
      }
    })
  })
}

/**
 * @description 从本地移除、清空全部的数据 - 异步方法
 */
export const asyncClearStorage = () => {
  return new Promise((resolve) => {
    wx.clearStorage({
      complete(res) {
        resolve(res)
      }
    })
  })
}
  • 16
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 微信小程序是一种轻量级应用程序,可以在微信内直接运行。封装wxml并回传参数是指在小程序中使用自定义组件,将组件封装在一个wxml文件中,并将参数传递给该组件。 封装wxml可以将页面上的一段重复的代码封装在一起,减少代码的冗余,提高代码的可维护性。在小程序中,我们可以创建一个自定义组件的文件夹,包含一个wxml、一个wxss和一个js文件。在wxml文件中定义组件的结构,在wxss文件中定义组件的样式,在js文件中处理组件的逻辑。通过封装wxml,我们可以将组件的代码复用在不同的页面中。 当我们需要向封装的组件传递参数时,可以在引用组件的地方通过属性对组件进行赋值。在引用组件的wxml文件中,使用<component-name attr="{{value}}"></component-name>的形式,其中component-name是组件的名称,attr是组件的属性名,value是要传递的参数。在组件的js文件中,可以使用this.properties.attr获取传递的参数。 除了通过属性传递参数,我们还可以通过事件传递参数。当组件内部发生某种操作时,可以使用this.triggerEvent('eventName', {data})触发一个自定义事件,并将参数传递给父组件。在父组件的wxml文件中,使用<component-name bind:eventName="handleEvent"></component-name>的形式来监听自定义事件,并在父组件的js文件中定义handleEvent方法来处理传递的参数。 总结来说,封装wxml并回传参数是一种在微信小程序中使用自定义组件的方式。通过封装wxml可以将重复的代码封装在一个文件中,提高代码的复用性和可维护性。通过传递参数,可以实现组件之间的数据交互,增强小程序的功能和灵活性。 ### 回答2: 微信小程序的wxml是一种类似HTML的标记语言,用于描述小程序的界面结构。当我们需要封装wxml并回传参数时,可以通过以下步骤实现: 1. 在小程序中创建一个自定义组件,可以是一个文件夹,将其命名为自定义组件的名称,例如"my-component"。 2. 在该文件夹下创建两个文件:一个是WXML文件,命名为"my-component.wxml";另一个是JS文件,命名为"my-component.js"。 3. 在"my-component.wxml"文件中,编写需要封装的wxml代码,可以是一段HTML标签等等。 4. 在"my-component.js"文件中,定义一个名为"properties"的属性,用于接收外部传入的参数,并在其中定义一个名为"myData"的属性,用于接收和存储从外部组件传入的数据。 5. 在"my-component.wxml"文件中的相关位置,使用"{{myData}}"的形式展示从外部传入的参数值。 以上步骤完成后,在小程序中使用该自定义组件时,可以通过将数据传递给组件的"properties"属性,实现参数的传递和回传。 例如,如果我们要将一个值为"Hello World"的参数传递给自定义组件,并将其展示在组件中,可以这样做: 1. 在页面的WXML文件中引入自定义组件,例如: <my-component myData="{{myParameter}}"></my-component> 2. 在页面的JS文件中定义和设置"myParameter"变量的值,例如: Page({ data: { myParameter: "Hello World" } }) 3. 在自定义组件的"my-component.wxml"文件中,使用"{{myData}}"的形式展示参数值,例如: <view>{{myData}}</view> 通过以上方式,我们可以在小程序封装wxml并回传参数,实现灵活的组件复用和数据传递。 ### 回答3: 微信小程序中,可以通过封装wxml并回传参数来实现一些特定的功能。封装wxml指的是将一段具有重复使用的代码封装为一个wxml文件,然后通过引用该wxml文件来复用这段代码。 首先,在需要封装的代码段上方定义一个 `<template>` 标签,指定该封装wxml的名称和参数。例如,我们定义一个名为 `myTemplate` 的封装wxml,并设置一个参数 `text`: ```html <template name="myTemplate"> <text>{{text}}</text> </template> ``` 然后,在需要使用封装wxml的地方,通过 `<import>` 标签引入该wxml文件,并使用 `<template>` 标签来调用封装wxml并传入参数。 ```html <import src="path/to/myTemplate.wxml"/> <template is="myTemplate" data="{{text: 'Hello World'}}"></template> ``` 在这个例子中,我们通过 `<import>` 标签引入名为 `myTemplate` 的封装wxml文件,并在调用时传入参数 `text: 'Hello World'`。 通过以上步骤,我们成功地封装了wxml并回传了参数。在 `<template>` 标签内部,我们可以使用 `{{text}}` 来引用传入的参数,从而实现动态的内容展示。 总结起来,使用微信小程序封装wxml并回传参数的主要步骤包括定义封装wxml文件、引入封装wxml文件和使用 `<template>` 标签传递参数。这样可以方便地复用代码和实现动态展示的效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值