useRouteMonitor.js 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. /**
  2. * 路由监听工具
  3. */
  4. /**
  5. * 监听路由变化
  6. * @param {Function} onChange 路由变化回调函数,参数为 (to, from)
  7. * @returns {void}
  8. */
  9. export function useRouteMonitor(onChange) {
  10. // 添加路由拦截器
  11. uni.addInterceptor('navigateTo', {
  12. invoke(e) {
  13. // 获取当前页面路由
  14. const pages = getCurrentPages()
  15. const from = pages[pages.length - 1]?.route || ''
  16. onChange && onChange(e.url, from)
  17. console.log('navigateTo', e.url, from)
  18. return e
  19. }
  20. })
  21. uni.addInterceptor('redirectTo', {
  22. invoke(e) {
  23. const pages = getCurrentPages()
  24. const from = pages[pages.length - 1]?.route || ''
  25. onChange && onChange(e.url, from)
  26. console.log('redirectTo', e.url, from)
  27. return e
  28. }
  29. })
  30. uni.addInterceptor('reLaunch', {
  31. invoke(e) {
  32. const pages = getCurrentPages()
  33. const from = pages[pages.length - 1]?.route || ''
  34. onChange && onChange(e.url, from)
  35. console.log('reLaunch', e.url, from)
  36. return e
  37. }
  38. })
  39. uni.addInterceptor('switchTab', {
  40. invoke(e) {
  41. const pages = getCurrentPages()
  42. const from = pages[pages.length - 1]?.route || ''
  43. onChange && onChange(e.url, from)
  44. console.log('switchTab', e.url, from)
  45. return e
  46. }
  47. })
  48. }