router-ready.js 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. /**
  2. * @typedef {import("vue-router").default} VueRouter
  3. */
  4. /**
  5. * 等待VueRouter实例就绪后,执行的回调函数
  6. * @callback Callback
  7. * @param {VueRouter} router 全局的VueRouter实例
  8. */
  9. let isReady = false
  10. const pendingCallbacks = []
  11. /**
  12. * 全局的VueRouter实例
  13. * @type {VueRouter}
  14. */
  15. // @ts-ignore
  16. let router = {
  17. // 填充些假数据,供开发手册使用
  18. currentRoute: {
  19. path: '/dummy',
  20. hash: '',
  21. query: {},
  22. params: {},
  23. // @ts-ignore
  24. matched: [{ path: '/dummy' }],
  25. fullPath: '/dummy',
  26. },
  27. }
  28. /**
  29. * 等待VueRouter实例就绪后,执行回调函数
  30. * @param {Callback} callback
  31. */
  32. function routerReady(callback) {
  33. if (isReady) {
  34. // eslint-disable-next-line standard/no-callback-literal
  35. callback(router)
  36. } else {
  37. pendingCallbacks.push(callback)
  38. }
  39. }
  40. function fireReady($router) {
  41. router = $router
  42. isReady = true
  43. while (pendingCallbacks.length) {
  44. const callback = pendingCallbacks.shift()
  45. // eslint-disable-next-line standard/no-callback-literal
  46. callback(router)
  47. }
  48. }
  49. export { fireReady, router }
  50. export default routerReady