在小程序中使用mixins

mixins我们提供了一个保持代码可重用性的方式,从而使我们的代码保持干净和易于维护。
在vue中当有多个组件的功能是相似的,我们可以用mixins共享相同的功能,那么在小程序中当有多个页面需要公用相似的功能时,我们是如何使用mixins的呢?

代码实现

在小程序中,每个页面都由 Page(options) 函数定义,而 Mixins 则作用于这个函数当中的 options 对象。因此我们实现 Mixins 的思路就有了——劫持并改写 Page 函数,最后再重新把它释放出来。

//mixins/mixins.js
let native = Page;
Page = (obj) => {
  let { mixins = [] } = obj;
  let merge = new Merge();
  Reflect.deleteProperty(obj, "mixins");
  let pageData = mixins.length <= 0 ? obj : merge.start(obj, ...mixins);
  native(pageData);
}
class Merge {
  constructor() { }
  start(rootObj, ...objs) {
    let root = {};
    objs.forEach((el) => {
      root = Merge.recursive(rootObj, el);
    })
    return root;
  }
  static recursive = (rootObj, obj) => {
    for (let attr in obj) {
      if (rootObj[attr] === undefined) {
        rootObj[attr] = obj[attr];
      }
      else if (Merge.isObject(obj[attr])) {
        Merge.recursive(rootObj[attr], obj[attr])
      }
      else {
        rootObj[attr] = obj[attr];
      }
    }
    return rootObj;
  }
  static isObject = (obj) => {
    return Object.prototype.toString.call(obj).includes("Object");
  }
}

定义自己的mixins

//mixins/myMixin.js
//常量存不变的数据
const PHONENUMBER='10086'
module.exports = {
  //可写数据部分
  data: { 

  },
  //这里可以写对数据的操作
  callme() {
    wx.makePhoneCall({
      phoneNumber: PHONENUMBER
    })
  },
  //生命周期部分 可以在这里写onload,onShow的混入啊等等
  // onShow() { 
  //   console.log('hello candy')
  //  }
}

引入改写的Page 函数

//app.js
//引入mixins.js
import './mixins/mixins.js'

引入minxin并且使用

//index.js
//引入mymixin
import mymixin from "../mixins/myMixin.js";

//注册mymixin
Page({
  mixins: [mymixin],
})

调用

<view bindtap="callme">拨打10086</view>

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值