index.js 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. import { createRouter as createRouterRaw, useRoute, useRouter as useRouterRaw } from 'uniapp-router-next'
  2. /**
  3. * 添加 router 路由方法别名
  4. */
  5. export function addRouterMethodAlias(router) {
  6. Object.assign(router, {
  7. push: (...args) => router.navigate(...args),
  8. pushTab: (...args) => router.switchTab(...args),
  9. replace: (...args) => router.redirect(...args),
  10. replaceAll: (...args) => router.reLaunch(...args),
  11. back: (options) => {
  12. router.navigateBack({ ...(options || {}), delta: options?.delta || options })
  13. },
  14. })
  15. }
  16. /**
  17. * 扩展 $Router 路由方法
  18. */
  19. export function createRouter(options) {
  20. const router = createRouterRaw({
  21. platform: process.env.UNI_PLATFORM,
  22. ...(options || {}),
  23. })
  24. addRouterMethodAlias(router)
  25. const rawInstall = router.install
  26. router.install = (app) => {
  27. rawInstall(app)
  28. app.config.globalProperties.$Router = router
  29. Object.defineProperty(app.config.globalProperties, '$Route', {
  30. enumerable: true,
  31. get() {
  32. return router.currentRoute.value
  33. },
  34. })
  35. }
  36. return router
  37. }
  38. /**
  39. * 扩展 uesRouter 路由方法
  40. */
  41. export function useRouter() {
  42. const router = useRouterRaw()
  43. addRouterMethodAlias(router)
  44. return router
  45. }
  46. export {
  47. useRoute,
  48. }
  49. /**
  50. * 将路由守卫包装为中间件
  51. */
  52. export function defineMiddleware(name, handler, options) {
  53. const { router } = options || {}
  54. router.beforeEach((to, from, next) => {
  55. const middleware = to.meta.middleware || []
  56. if (!middleware.includes(name)) {
  57. next()
  58. }
  59. else {
  60. handler({
  61. ...router,
  62. beforeEach: callback => callback(to, from, next),
  63. })
  64. }
  65. })
  66. router.afterEach((to, from) => {
  67. const middleware = to.meta.middleware || []
  68. if (middleware.includes(name)) {
  69. handler({
  70. ...router,
  71. afterEach: callback => callback(to, from),
  72. })
  73. }
  74. })
  75. }