微信小程序如何实现混入:自定义组件Behavior

重构引发的思考

最近在重构小程序,重构的时候发现很多页面都用到了定位与逆地理解析这一功能,于是项目里几乎每个页面都要写一下获取定位的相关逻辑,实在头大。有没有办法抽离这部分逻辑呢?写成Component又太庞大,因为我们只需要js的相关逻辑。把方法抽离到utils中再调用,又需要再声明个响应式data去接收,都不是最优方案。那小程序能不能做到混入呢?答案是:能!

小程序中的behaviors

behaviors 是用于组件间代码共享的特性,类似于一些编程语言中的 “mixins” 或 “traits”。

每个 behavior 可以包含一组属性、数据、生命周期函数和方法。组件注意:基础库 2.9.2 开始在页面中也支持使用 behaviors)引用它时,它的属性、数据和方法会被合并到组件中,生命周期函数也会在对应时机被调用。 每个组件可以引用多个 behavior ,behavior 也可以引用其它 behavior 。
behavior 需要使用 Behavior() 构造器定义。

参考文档

Behavior(Object object)
注册一个 behavior,接受一个 Object 类型的参数。

定义段 类型 是否必填 描述
properties Object Map 同组件的属性
data Object 同组件的数据
methods Object 同自定义组件的方法
behaviors String Array 引入其它的 behavior
created Function 生命周期函数
attached Function 生命周期函数
ready Function 生命周期函数
moved Function 生命周期函数
detached Function 生命周期函数

示例

// /behaviors/location.js

let QQMapWX = require('../utils/qqmap-wx-jssdk.min.js');
let qqmapsdk = new QQMapWX({
   key: '你自己的key'});
module.exports = Behavior({
   
    // 共享数据
    data: {
   
        location: {
   }
    },

    methods: {
   
        getLocation() {
   
        	// 因为我们的业务功能必须在位置信息获取到以后才能正常使用,所以这里封装成Promise,以便链式调用
            return new Promise((resolve, reject) => {
   
                wx.authorize({
   scope: 'scope.userLocation'}
  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值