初始化项目
This commit is contained in:
109
node_modules/uni-simple-router/src/helpers/mixins.ts
generated
vendored
Normal file
109
node_modules/uni-simple-router/src/helpers/mixins.ts
generated
vendored
Normal file
@@ -0,0 +1,109 @@
|
||||
import { Router, routesMapRule, RoutesRule, pageTypeRule} from '../options/base';
|
||||
import {createRouteMap} from '../helpers/createRouteMap'
|
||||
import {buildVueRoutes, buildVueRouter} from '../H5/buildRouter'
|
||||
import {proxyEachHook} from '../H5/proxyHook'
|
||||
import {registerLoddingPage} from '../app/appPatch';
|
||||
import { proxyPageHook } from '../public/page';
|
||||
import { forceGuardEach } from '../public/methods';
|
||||
import { assertParentChild, voidFun } from './utils';
|
||||
import { getEnterPath } from '../applets/appletPatch';
|
||||
import { mpPlatformReg } from './config';
|
||||
|
||||
let registerRouter:boolean = false;
|
||||
let onloadProxyOk:boolean = false;
|
||||
|
||||
const appletProxy:{
|
||||
app:boolean;
|
||||
page:string;
|
||||
} = {
|
||||
app: false,
|
||||
page: ''
|
||||
}
|
||||
|
||||
export function getMixins(Vue:any, router: Router):{
|
||||
beforeCreate(this: any): void;
|
||||
} | {
|
||||
beforeCreate(): void;
|
||||
} | {
|
||||
onLaunch(): void;
|
||||
} {
|
||||
let platform = router.options.platform;
|
||||
if (new RegExp(mpPlatformReg, 'g').test(platform)) {
|
||||
platform = 'app-lets';
|
||||
}
|
||||
const toggleHooks = {
|
||||
h5: {
|
||||
beforeCreate(this: any): void {
|
||||
if (this.$options.router) {
|
||||
router.$route = this.$options.router; // 挂载vue-router到路由对象下
|
||||
let vueRouteMap:RoutesRule[]|RoutesRule = [];
|
||||
if (router.options.h5?.vueRouterDev) {
|
||||
vueRouteMap = router.options.routes;
|
||||
} else {
|
||||
vueRouteMap = createRouteMap(router, this.$options.router.options.routes).finallyPathMap;
|
||||
(router.routesMap as routesMapRule).vueRouteMap = vueRouteMap;
|
||||
buildVueRoutes(router, vueRouteMap);
|
||||
}
|
||||
buildVueRouter(router, this.$options.router, vueRouteMap);
|
||||
proxyEachHook(router, this.$options.router);
|
||||
}
|
||||
}
|
||||
},
|
||||
'app-plus': {
|
||||
beforeCreate(this: any): void {
|
||||
if (!registerRouter) {
|
||||
registerRouter = true;
|
||||
proxyPageHook(this, router, 'app');
|
||||
registerLoddingPage(router);
|
||||
}
|
||||
}
|
||||
},
|
||||
'app-lets': {
|
||||
beforeCreate(this: any): void {
|
||||
// 保证这个函数不会被重写
|
||||
const pluginMark = $npm_package_name;
|
||||
voidFun(pluginMark);
|
||||
|
||||
let isProxy:boolean = true;
|
||||
const pageType:pageTypeRule = this.$options.mpType;
|
||||
|
||||
if (onloadProxyOk) {
|
||||
return
|
||||
}
|
||||
|
||||
if (pageType === 'component') {
|
||||
isProxy = assertParentChild(appletProxy['page'], this);
|
||||
} else {
|
||||
if (pageType === 'page') {
|
||||
appletProxy[pageType] = getEnterPath(this, router);
|
||||
router.enterPath = appletProxy[pageType]; // 我不确定在不同端是否都是同样的变现?可能有的为非绝对路径?
|
||||
} else {
|
||||
appletProxy[pageType] = true;
|
||||
}
|
||||
}
|
||||
if (isProxy) {
|
||||
proxyPageHook(this, router, pageType);
|
||||
}
|
||||
},
|
||||
onLoad(this: any):void{
|
||||
// 保证这个函数不会被重写,否则必须在启动页写onLoad
|
||||
const pluginMark = $npm_package_name;
|
||||
voidFun(pluginMark);
|
||||
|
||||
if (!onloadProxyOk && assertParentChild(appletProxy['page'], this)) {
|
||||
onloadProxyOk = true;
|
||||
forceGuardEach(router);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
return toggleHooks[(platform as 'h5'|'app-plus'|'app-lets')];
|
||||
}
|
||||
export function initMixins(Vue: any, router: Router) {
|
||||
const routesMap = createRouteMap(router, router.options.routes);
|
||||
router.routesMap = routesMap; // 挂载自身路由表到路由对象下
|
||||
// Vue.util.defineReactive(router, '_Route', createRoute(router, 19970806))
|
||||
Vue.mixin({
|
||||
...getMixins(Vue, router)
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user