Skip to content
  • P
    Projects
  • G
    Groups
  • S
    Snippets
  • Help

肖康 / H5_2.0

  • This project
    • Loading...
  • Sign in
Go to a project
  • Project
  • Repository
  • Issues 0
  • Merge Requests 0
  • Pipelines
  • Wiki
  • Snippets
  • Settings
  • Activity
  • Graph
  • Charts
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
  • Files
  • Commits
  • Branches
  • Tags
  • Contributors
  • Graph
  • Compare
  • Charts
Find file
Normal viewHistoryPermalink
Switch branch/tag
  • H5_2.0
  • node_modules
  • _uni-simple-router@1.5.5@uni-simple-r...
  • vueRouter
  • proxy
  • proxy.js
proxy.js 1.45 KB
肖康's avatar
first init
ddbafbda
 
肖康 committed 2 years ago
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
import { beforeEnterHooks } from '../concat';
import { vuelifeHooks } from '../base';
import MyArray from '../extends/myArray';

/**
 * 通过 Object.defineProperty 代理一个对象主要是拦截beforeEnter 生命钩子
 * @param {Router} Router  路由实例对象
 * @param {Object} BeProxy 需要代理的路由表
 */
export const proxyBeforeEnter = function (Router, BeProxy) {
    const proxyDc = Object.create(null);// 创建没有继承的属性
    const BeProxyKeys = Object.keys(BeProxy);
    for (let i = 0; i < BeProxyKeys.length; i += 1) {
        const key = BeProxyKeys[i];
        Object.defineProperty(proxyDc, key, {
            enumerable: true,
            configurable: true,
            get() {
                const value = BeProxy[key];
                if (key == 'beforeEnter' && value !== undefined) {
                    return (to, from, next) => {
                        beforeEnterHooks(to, from, next, value, Router);
                    };
                }
                return value;
            },
            set(v) {
                BeProxy[key] = v;
            },
        });
    }
    return proxyDc;
};

/**
 * 在uni-app没有注入生命周期时先直接代理相关生命周期数组
 * @param {Object} Router
 * @param {Object} key
 * @param {Funtion} hookFun
 */
export const proxyEachHooks = function (Router, key, hookFun) {
    const vueOldHooks = vuelifeHooks[key];
    return new MyArray(Router, vueOldHooks, hookFun);
};