vue-router: vue的一个插件,专门来实现spa应用
单页应用 single page application 整个应用只有一个完整的页面
点击页面的导航,只会做局部更新
通过ajax请求数据
什么是路由
一个路由就是一组映射关系 key:value,key为路径,value是function或Component
后端路由
value是function,用来处理客户端的请求
即匹配请求路径返回不同的数据
前端路由
value是Component,用来展示不同的内容
即匹配浏览器路径展示不同的Component
npm i vue-router
router/index.js
import VueRouter from 'vue-router' import Island from '../components/Island' import Polaris from '../components/Polaris' export default new VueRouter({ routes:[ { component:Island, path:"/Island" }, { component:Polaris, path:"/Polaris" }, ] })
main.js
import Vue from 'vue' import App from './App.vue' import VueRouter from 'vue-router' import router from './router' // 关闭Vue的生产提示 Vue.config.productionTip = false Vue.use(VueRouter) // 创建Vue实例 new Vue({ // 将app组件放入容器中 render: h => h(App), router }).$mount('#app')
router-link:
router-view
app.vue
<template> <div id="app"> <div class="nav"> <router-link class="nav" to="/Island" active-class="active-nav"> Island </router-link> <router-link class="nav" to="/Polaris" active-class="active-nav"> Polaris </router-link> </div> <div class="con"> <router-view /> </div> </div> </template> <script> export default { name: "App", }; </script> <style scoped> #app { display: flex; width: 400px; gap: 10px; height: 100px; } .nav { flex-basis: 100px; display: flex; flex-direction: column; justify-content: flex-start; } .con { flex-grow: 1; background: rgb(126, 97, 143, 0.5); } .active-nav { background: lightseagreen; } </style>
routes里面配置的是路由组件,一般放在pages目录里面,而一般组件放在component目录下面
路由切换时,被隐藏的路由组件默认会被销毁,需要的时候会再次挂载
每个路由组件都有自己的routes信息
整个应用只有一个$router