useSafeNavigate.js 922 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. // hooks/useSafeNavigate.js
  2. import { ref } from 'vue';
  3. // 模块顶层的全局状态锁
  4. const globalIsNavigating = ref(false);
  5. export function useSafeNavigate(options = {}) {
  6. const defaultOptions = {
  7. wait: 300, // 导航冷却时间(ms)
  8. };
  9. const config = { ...defaultOptions, ...options };
  10. const safeNavigateTo = (url, navigateOptions = {}) => {
  11. if (globalIsNavigating.value) {
  12. console.log('正在跳转...');
  13. return;
  14. }
  15. globalIsNavigating.value = true;
  16. uni.navigateTo({
  17. url,
  18. ...navigateOptions,
  19. success: () => {
  20. setTimeout(() => {
  21. globalIsNavigating.value = false;
  22. }, config.wait);
  23. },
  24. fail: (err) => {
  25. console.error('Navigation failed:', err);
  26. globalIsNavigating.value = false;
  27. },
  28. });
  29. };
  30. return {
  31. isNavigating: globalIsNavigating, // 共享的全局状态
  32. safeNavigateTo,
  33. };
  34. }