pageMixin.js 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. // 定义扩展的字段名称
  2. const MIXIN = 'mixins';
  3. const DATA = 'data';
  4. const _toString = Object.prototype.toString;
  5. const isObject = obj => _toString.call(obj) === '[object Object]';
  6. const loopMixin = (mixins, newObj) => {
  7. if (Array.isArray(mixins)) {
  8. mixins.forEach(mixin => {
  9. for (const key in mixin) {
  10. if (key === MIXIN) {
  11. const subMixins = mixin[MIXIN];
  12. if (Array.isArray(subMixins)) {
  13. loopMixin(subMixins, newObj);
  14. }
  15. } else if (key === DATA) {
  16. newObj[DATA] = Object.assign({}, newObj[DATA], mixin[DATA]);
  17. } else {
  18. newObj[key] = mixin[key];
  19. }
  20. }
  21. });
  22. }
  23. };
  24. export default function PageMixin(option) {
  25. if (!isObject(option)) {
  26. throw new Error('配置项必须为函数');
  27. }
  28. const newObj = {};
  29. for (const key in option) {
  30. if (key === MIXIN) {
  31. const mixins = option[MIXIN];
  32. loopMixin(mixins, newObj);
  33. } else if (key === DATA) {
  34. newObj[DATA] = Object.assign({}, newObj[DATA], option[[DATA]]);
  35. } else {
  36. newObj[key] = option[key];
  37. }
  38. }
  39. return newObj;
  40. }