vue3路由vue-router学习介绍

  • 2025-04-27 21:15:08
  • 开发
  • 31
  • shevechco

在vue3中不是像传统网页那样使用a标签然后href指向链接页面地址,是通过vue-router组件生成的,今天我们就来看看下如何在vue3中使用vue-route
首先是安装,我们使用的是npm

npm install vue-router@4

然后在src目录下创建一个router目录,再创建一个index.js文件,我们简单学习的配置如下:

import { createRouter,createWebHistory } from 'vue-router';
import Cate from '@/views/Cate.vue';
import Post from '@/views/Post.vue';
import Search from '@/views/Search.vue';

const routes = [
    { 
      path: '/',
      name: 'home',
      component: Cate,
      meta: {title: '首页'}
    },
    {
      path: '/cate/:id',
      name: 'cate',
      component: Cate,
      props: true,
      meta: {
        title: '分类'
      }
    },
    {
      path: '/post/:id',
      name: 'post',
      component: Post,
      props: true,
      meta: {
        title: '内容'
      }
    },
    {
      path: '/search',
      name: 'search',
      component: Search,
      props: true,
      meta: {
        title: '搜索'
      }
    }
  ];

  const router = createRouter({
    history: createWebHistory(),
    routes,
  });
  export default router;

我们可以来学习下上述配置,首先是引入路由组件,createRouter是创建路由器,然后是创建routes规则列表,里面包含路由地址和名字,还有路由组件,注意component后面对应的都是路由组件,我们可以将这些组件通过规范都放入/src/views/目录下
meta则是后面用到的标题,props是将路由参数暴露到路由组件下,那么路由组件内就可以通过defineProps接收到组件的所有url参数
createWebHistory模式:是表示使用history模式,这种模式下浏览器可以记录前一页,后一页,同时URL地址也是完全按照自己的想法生成,但是创新页面会出现404的问题,需要我们在nginx做一些额外的配置来避免这个问题。
另外params参数模式需要使用:id进行占位,query参数则无需占位
createWebHashHistory模式:这种模式浏览器不会记录前一页,后一页,很适合用来做后台,同时URL地址包含一个#。
我们还支持直接在路由规则配置的地址进行重定向

const routes = [
	......
    { 
      path: '/',
      name: 'home',
      redirect: { name: 'default' }
    },
    { 
      path: '/index',
      name: 'default',
      component: Cate,
      meta: {title: '首页'}
    }
  ];

最后export就是将路由器暴露出去,这样其他组件导入这个暴露的router。
接着我们要去入口的main.js文件使用路由器。

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

const app = createApp(App);
app.use(router);
app.mount('#app');

我们需要将main.js改为上述这样配置。
接着写一个普通组件,导航菜单,使用router-link生成路由导航

<template>
	<ul class="layui-nav layui-bg-gray">
	  <li class="layui-nav-item layui-this">
	    <router-link :to="{name: 'home'}">首页</router-link>
	  </li>
	  <li 
	    class="layui-nav-item" 
	    v-for="cate in cateList" 
	    :key="cate.id"
	  >
	    <router-link :to="{name: 'cate', params: {id: cate.id}}">{{ cate.cate_name }}</router-link>
	  </li>
	</ul>
</template>

<script setup>
import { ref,onMounted } from "vue";
import axios from "axios";

const cateList = ref([]);

onMounted(async ()=>{
  try {
    const response = await axios.get("/api/cate_list")
    cateList.value = response.data.data
  } catch(error) {
    console.error(error);
  }
});

</script>

我们使用router-link生成路由导航,其中最终的是to,其中name就是路由规则的名字,params后面就是路由参数
router-link中的to属性可以有很多写法,例如上面的:to,这种就是直接按照动态的方式去形成地址,也可以直接写成to,那么就是这样

<router-link to="/">首页</router-link>

一般这种就用于静态的路由导航地址。
渲染路由组件的方法就是直接在需要渲染的地方加上,也是需要先导入路由组件

import { RouterView } from 'vue-router';

然后在template模板中使用如下标签即可。

<template>
<NavBar />
<RouterView></RouterView>
</template>

<script setup>
import NavBar from './components/NavBar.vue';
import { RouterView } from 'vue-router';

</script>

都可以,你可以在任何地址放置这个路由视图
在之前定义的路由规则中,Cate.vue和Post.vue都是路由组件,我们在这两个路由组件中可以接受地址的参数,使用如下方式进行接收

defineProps(['id '])

上述方式前提是在路由规则中提前定义了props: true
还有其他方式,例如使用useRoute也可以接收路由参数

import { useRoute } from 'vue-router';
const route = useRoute();

然后使用route.params.id就可以用到传到地址的id的值,或者直接解构使用

import { toRefs } from "vue";
const { params } = toRefs(route)

然后使用params.id就可以获取id了。
除了上述一些用法外,还有例如搜索我们一般地址是/search?keywords=centos这样的,我们在点击搜索按钮以后可以使用router.push方法跳转

import { useRouter } from "vue-router";
const router = useRouter();
function jumpToSearch(){
	router.push({
		name: 'search',
		query: {
			keywords: keywords
		}
	});
}

除了push方法还有replace方法,replace方法跳转以后是不能回退的,这个和push模式有区别。

function jumpToSearch(){
	router.replace({
		name: 'search',
		query: {
			keywords: keywords
		}
	});
}

以上是目前所学习掌握的vue-router组件的所有知识,后面如果学习这个模块下其他组件,再进行补充。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.sulao.cn/post/1035

相关推荐