小程序增加插件管理功能

178 阅读1分钟

背景

业务上需要给小程序各个页面增加营销任务功能,需要在每个页面,根据配置,弹出不同的弹窗。

由于小程序本身并不存在全局路由管理和状态管理的功能,考虑到要新增这两项功能,所以在此之前,先基于小程序的Page函数,来开发插件的注册功能,保障后期的扩展性。

首页个人中心
martket1.pngmartket2.png

实现思路

仿照vue的插件管理机制,由于全局路由管理需要依赖Page函数,所以可以通过劫持Page函数,来达到插件注册的功能。

功能实现

  • 1.给Page函数增加plugins属性,用于保存注册的方法。
  • 2.给Page函数增加use方法,用于向plugins中保存注册的插件方法,插件方法暴露出一个install方法
  • 3.劫持Page函数,在其初始化的时候执行plugins中的插件方法,调用插件方法的install方法,并传入当前用户配置的config,插件方法通过修改用户config,来达到对代码流程进行管控的目的。
const oldPage = Page

Page = function (config = {}) {
    Page.plugins.forEach(plugin => {
        plugin.install(config)
    })
    oldPage(config)
}

Page.plugins = []

Page.use = (plugin = {}) => {
    if (typeof plugin.install !== 'function') {
        throw new TypeError('Page plugin should has an install method')
    }
    Page.plugins.push(plugin)
}