| 12345678910111213141516171819202122232425262728293031323334353637 |
- /**
- * mixins 为 Page 增加 mixin 功能
- */
- const originPage = Page;
- const originProperties = ['data', 'properties', 'options'];
- const originMethods = ['onLoad', 'onReady', 'onShow', 'onHide', 'onUnload', 'onPullDownRefresh', 'onReachBottom', 'onShareAppMessage', 'onPageScroll', 'onTabItemTap'];
- function merge (mixins, options) {
- mixins.forEach((mixin) => {
- if (Object.prototype.toString.call(mixin) !== '[object Object]') {
- throw new Error('mixin 类型必须为对象!')
- }
- for (let [key, value] of Object.entries(mixin)) {
- if (originProperties.includes(key)) {
- options[key] = { ...value, ...options[key] }
- } else if (originMethods.includes(key)) {
- const originFunc = options[key];
- options[key] = function (...args) {
- value.call(this, ...args);
- return originFunc && originFunc.call(this, ...args)
- }
- } else {
- options = { ...mixin, ...options }
- }
- }
- });
- return options
- }
- Page = (options) => {
- const mixins = options.mixins;
- if (Array.isArray(mixins)) {
- delete options.mixins;
- options = merge(mixins, options)
- }
- originPage(options)
- };
|