美文网首页react & vue & angular
vue3x vue-router4的创建和使用

vue3x vue-router4的创建和使用

作者: 暴躁程序员 | 来源:发表于2023-01-04 15:33 被阅读0次

1. 安装 vue-router

npm install vue-router@4 -S

2. 创建vue-router配置文件

创建 src\router\index.js

import { createRouter, createWebHashHistory } from "vue-router";
const router = createRouter({
  history: createWebHashHistory(),
  routes: [
    {
      path: "/",
      component: () => import("@/views/home/Home"),
      meta: {
        isAuth: true,
      },
    },
    {
      path: "/home",
      name: "home",
      component: () => import("@/views/home/Home"),
      meta: {
        isAuth: true,
      },
    },
    {
      path: "/login/:uname/:pwd",
      name: "login",
      component: () => import("@/views/login/Login"),
      meta: {
        isAuth: false,
      },
    },
    {
      path: "/register",
      name: "register",
      component: () => import("@/views/register/Register"),
      meta: {
        isAuth: false,
      },
    },
  ],
});

router.beforeEach((to, from, next) => {
  // console.log(to);
  // console.log(from);
  next()
  // if (to.meta.isAuth) {
  //   if (localStorage.token) {
  //     next();
  //   } else {
  //     router.push("/login");
  //   }
  // } else {
  //   next();
  // }
});

export default router;

3. 在 main.js 中加载 vue-router 配置文件

import { createApp } from 'vue'
import App from './App.vue'
import router from './router'

createApp(App).use(router).mount('#app')

4. 定义路由出口

在 App.vue 中定义路由出口

<template>
  <router-view></router-view>
</template>

5. 在组件中使用路由

在 src\views\home\Home.vue 中调用路由

  • v4版本后禁用了vue-router的隐式 params 传参,可用vuex方案来代替
  • 动态传参方式 /login/100/200,依然可以使用,需要在路由配置文件中配置参数名,此方式使用params来接收参数
<template>
  <h1>home</h1>
  <div>
    <router-link to="/home">⾸⻚</router-link>
    <router-link :to="{path: '/login/zhangsan/123456',query:{id:'200'}}">登录页</router-link>
    <router-link to="/register">注册页</router-link>
  </div>
  <hr>
  <div>
    <div @click="toMainPage(1)">⾸⻚</div>
    <div @click="toMainPage(2)">登录页</div>
    <div @click="toMainPage(3)">注册页</div>
  </div>
</template>
    
  <script>
import { useRouter } from "vue-router";
export default {
  name: "home",
  setup() {
    const router = useRouter();

    function toMainPage(n) {
      switch (n) {
        case 1:
          router.push({
            path: "/home",
            query: {
              id: "100",
            },
          });
          break;
        case 2:
          router.replace({
            path: "/login/zhangsan/123456",
            query: {
              id: "200",
            },
          });
          break;
        case 3:
          router.push({
            path: "/register",
            query: {
              id: "300",
            },
          });
          break;
        default:
          break;
      }
    }

    return {
      toMainPage,
    };
  },
};
</script>

5. 获取路由参数

在 src\views\login\Login.vue 中获取参数

  • 虽然隐式params传参被禁用,但是动态传参也用 route.params 来接收参数
<template>
    login
  </template>
  
  <script>
  import { useRoute } from "vue-router";
  export default {
    name: "login",
    setup(){
        const route = useRoute();
        console.log(route.query?.id); // 100
        console.log(route.params); // {a: '100', b: '200'}
    }
  };
  </script>

相关文章

网友评论

    本文标题:vue3x vue-router4的创建和使用

    本文链接:https://www.haomeiwen.com/subject/wtslcdtx.html