uni-app 支持vue3路由设置别名 路由拦截的插件

发布于 1周前 作者 eggper 来自 Uni-App

uni-app 支持vue3路由设置别名 路由拦截的插件

2 回复

uni-simple-router


在 uni-app 中,虽然官方并没有直接提供对 Vue 3 路由别名的原生支持,但你可以通过一些技巧实现类似的功能。同时,路由拦截也可以通过自定义逻辑来实现。下面是一个结合 Vue Router 和 uni-app 特性实现路由别名和路由拦截的代码示例。

1. 安装 Vue Router

首先,确保你已经安装了 vue-router。虽然 uni-app 默认使用自己的页面路由管理,但你可以通过引入 Vue Router 来实现更复杂的路由逻辑。

npm install vue-router@next

2. 配置路由及别名

main.jsmain.ts 中配置 Vue Router,并设置路由别名。

import { createRouter, createWebHistory } from 'vue-router';

const routes = [
  {
    path: '/home',
    name: 'Home',
    component: () => import('@/pages/Home.vue'),
    alias: '/dashboard' // 设置别名
  },
  {
    path: '/about',
    name: 'About',
    component: () => import('@/pages/About.vue')
  }
];

const router = createRouter({
  history: createWebHistory(process.env.BASE_URL),
  routes
});

export default router;

3. 路由拦截

在 Vue Router 实例中添加全局前置守卫来实现路由拦截。

router.beforeEach((to, from, next) => {
  // 在这里添加你的拦截逻辑
  console.log('Navigating from', from.fullPath, 'to', to.fullPath);

  // 示例:如果用户未登录,重定向到登录页面
  if (to.path !== '/login' && !isUserLoggedIn()) {
    next('/login');
  } else {
    next();
  }
});

function isUserLoggedIn() {
  // 实现你的登录状态检查逻辑
  return !!localStorage.getItem('userToken');
}

4. 在 uni-app 中使用 Vue Router

由于 uni-app 默认使用自己的页面管理,你需要做一些额外的配置来集成 Vue Router。这通常涉及在 App.vue 中使用 <router-view />,并确保你的页面组件被正确导入和使用。

<template>
  <App />
  <router-view /> <!-- 使用 Vue Router 的视图容器 -->
</template>

<script>
export default {
  // ...其他配置
  mounted() {
    // 确保 Vue Router 初始化
    this.$router.push(this.$route.path);
  }
};
</script>

注意:在 uni-app 中直接使用 Vue Router 可能会遇到一些兼容性问题,尤其是与原生页面跳转和生命周期管理的交互。因此,上述方法更多是作为概念验证,实际项目中可能需要结合 uni-app 的页面跳转 API 和 Vue Router 的功能进行更复杂的集成。在生产环境中,务必充分测试以确保稳定性和性能。

回到顶部