Mixin 混合

混合可以将组件之间的可复用部分抽离,从而在组件中使用混合时,可以将混合的数据,事件以及方法注入到组件之中。混合分为两种:

  • 默认式混合
  • 兼容式混合

默认式混合

对于组件data数据,components组件,events事件以及其它自定义方法采用默认式混合,即如果组件未声明该数据,组件,事件,自定义方法等,那么将混合对象中的选项将注入组件之中。对于组件已声明的选项将不受影响。

  1. // mixins/test.js
  2. import wepy from 'wepy';
  3. export default class TestMixin extends wepy.mixin {
  4. data = {
  5. foo: 'foo defined by page',
  6. bar: 'bar defined by testMix'
  7. };
  8. methods = {
  9. tap () {
  10. console.log('mix tap');
  11. }
  12. }
  13. }
  14. // pages/index.wpy
  15. import wepy from 'wepy';
  16. import TestMixin from './mixins/test';
  17. export default class Index extends wepy.page {
  18. data = {
  19. foo: 'foo defined by index'
  20. };
  21. mixins = [TestMixin ];
  22. onShow() {
  23. console.log(this.foo); // foo defined by index
  24. console.log(this.bar); // bar defined by testMix
  25. }
  26. }

兼容式混合

对于组件methods响应事件,以及小程序页面事件将采用兼容式混合,即先响应组件本身响应事件,然后再响应混合对象中响应事件。注意,这里事件的执行顺序跟Vue中相反,Vue中是先执行mixin中的函数, 再执行组件本身的函数

  1. // mixins/test.js
  2. import wepy from 'wepy';
  3. export default class TestMixin extends wepy.mixin {
  4. methods = {
  5. tap () {
  6. console.log('mixin tap');
  7. }
  8. };
  9. onShow() {
  10. console.log('mixin onshow');
  11. }
  12. }
  13. // pages/index.wpy
  14. import wepy from 'wepy';
  15. import TestMixin from './mixins/test';
  16. export default class Index extends wepy.page {
  17. mixins = [TestMixin];
  18. methods = {
  19. tap () {
  20. console.log('index tap');
  21. }
  22. };
  23. onShow() {
  24. console.log('index onshow');
  25. }
  26. }
  27. // index onshow
  28. // mixin onshow
  29. // ----- when tap
  30. // index tap
  31. // mixin tap