返回介绍

使用 mixin

发布于 2020-10-10 07:56:10 字数 2125 浏览 1031 评论 0 收藏 0

Mpx 提供了一套完善的 mixin 机制,有人可能要问,原生小程序中已经支持了 behaviors,为何我们还需要提供 mixin 呢?主要有以下两点原因:

  1. Behaviors 是平台限度的,只有在部分小程序平台中可以使用,而且内置 behaviors 承载了除了 mixin 外的其他功能,框架提供的 mixin 是一个与平台无关的基础能力;
  2. Behaviors 只有组件支持使用,页面不支持,而且只支持局部声明,框架提供的 mixin 与组件页面无关,且支持全局 mixin 声明。

局部 Mixin

AppPageComponent 接收 mixins 参数,参数格式为[Mixin1(Object),Mixin2(Object)]

Mixin 混合实例对象可以像正常的实例对象一样包含选项,相同选项将进行逻辑合并。举例:如果 mixin1 包含一个钩子 ready,而创建组件 Component 也有一个钩子 ready,两个函数将被调用。 Mixin 钩子按照传入顺序(数组顺序)依次调用,并在调用组件自身的钩子之前被调用。

// mixin.js
export default {
  data: {
    list: {
      'phone': '手机',
      'tv': '电视',
      'computer': '电脑'
    }
  },
  ready () {
    console.log('mixins ready:', this.list.phone)
  }
}
<template>
  <view class="list">
    <view wx:for="{{listData}}" wx:key="index">{{item}}</view>
  </view>
</template>

<script>
  import { createComponent } from '@mpxjs/core'
  import mixins from '../common/mixins'

  createComponent({
    mixins: [mixins],
    data: {
      listData: ['手机', '电视', '电脑']
    },
    ready () {
      console.log('component ready:', this.list.phone)
    }
  })
</script>
// 输出结果为
mixins ready: 手机
component ready: 手机

全局 Mixin

Mpx 中可以使用 mpx.injectMixins 方法配置全局 mixin,能够按照 App / 组件 / 页面维度自由配置,简单示例如下:

import mpx from '@mpxjs/core'

// 第一个参数为 mixins,可以混入任意配置,第二个参数为混入生效范围,可传递 'app' / 'page' / 'component' 字符串或由其组成的数组
mpx.injectMixins([
  {
    data: {
      customData: '123'
    }
  }
], ['page'])

// mpx.mixin 为 mpx.injectMixins 的别名,混入单个 mixin 时可以直接传递对象,生效范围可传递字符串
mpx.mixin({
  methods: {
    useCustomData () {
      console.log(this.customData)
    }
  }
}, 'component')

// 当未传递生效范围时默认为全局生效,对 app / page / component 都生效
mpx.mixin({
  computed: {
    processedCustomData () {
      return this.customData + '321'
    }
  }
})

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文