新增vuex,router
This commit is contained in:
71
node_modules/uni-simple-router/src/H5/proxyHook.ts
generated
vendored
Normal file
71
node_modules/uni-simple-router/src/H5/proxyHook.ts
generated
vendored
Normal file
@@ -0,0 +1,71 @@
|
||||
import {Router, proxyHookName, totalNextRoute, navtoRule} from '../options/base';
|
||||
|
||||
export class MyArray extends Array {
|
||||
constructor(
|
||||
private router:Router,
|
||||
private vueEachArray:Array<Function>,
|
||||
private myEachHook:Function,
|
||||
private hookName:'beforeHooks'| 'afterHooks',
|
||||
) {
|
||||
super();
|
||||
Object.setPrototypeOf(this, MyArray.prototype)
|
||||
}
|
||||
push(v:any):any {
|
||||
this.vueEachArray.push(v);
|
||||
const index = this.length;
|
||||
this[this.length] = (to: totalNextRoute, from: totalNextRoute, next:(rule?: navtoRule|false)=>void) => {
|
||||
if (index > 0) {
|
||||
this.vueEachArray[index](to, from, () => {
|
||||
next && next()
|
||||
});
|
||||
} else {
|
||||
this.myEachHook(to, from, (nextTo?:navtoRule|false) => {
|
||||
// Fixe https://github.com/SilurianYang/uni-simple-router/issues/241 2021年3月6日22:15:27
|
||||
// 目前不调用uni-app的守卫函数,因为会丢失页面栈信息
|
||||
if (nextTo === false) {
|
||||
next(false);
|
||||
} else {
|
||||
this.vueEachArray[index](to, from, (uniNextTo?:navtoRule|false) => {
|
||||
next(nextTo);
|
||||
})
|
||||
}
|
||||
}, this.router, true);
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
export function proxyEachHook(router:Router, vueRouter:any):void {
|
||||
const hookList:Array<'beforeHooks'| 'afterHooks'> = ['beforeHooks', 'afterHooks'];
|
||||
for (let i = 0; i < hookList.length; i++) {
|
||||
const hookName = hookList[i];
|
||||
const myEachHook = router.lifeCycle[(hookName as proxyHookName)][0];
|
||||
if (myEachHook) {
|
||||
const vueEachArray:Array<Function> = vueRouter[hookName];
|
||||
vueRouter[hookName] = new MyArray(router, vueEachArray, myEachHook, hookName);
|
||||
}
|
||||
}
|
||||
}
|
||||
export function proxyH5Mount(router:Router):void {
|
||||
if (router.mount.length === 0) {
|
||||
if (router.options.h5?.vueRouterDev) {
|
||||
return
|
||||
}
|
||||
const uAgent = navigator.userAgent;
|
||||
const isIos = !!uAgent.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/)
|
||||
if (isIos) {
|
||||
// 【Fixe】 https://github.com/SilurianYang/uni-simple-router/issues/109
|
||||
setTimeout(() => {
|
||||
const element = document.getElementsByTagName('uni-page');
|
||||
if (element.length > 0) {
|
||||
return false
|
||||
}
|
||||
window.location.reload();
|
||||
}, 0);
|
||||
}
|
||||
} else {
|
||||
const [{app}] = router.mount;
|
||||
app.$mount();
|
||||
router.mount = [];
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user