一个路径对应一个组件;路由就是一组key-value的对应关系(路径和组件的对应关系)
npm i vue-router //是个插件
import VueRouter from ‘vue-router’
Vue.use(VueRouter)
import router from ‘./router’ ,然后在new Vue里面添加一个配置项router
在src文件夹里新建一个router文件夹,下建一个index.js文件 //类似vuex的store
import VueRouter from 'vue-router'
import About from '../components/About' //记得引入组件
const router = new VueRouter({
routes:[
{
path:'/about',
component:About
},
]})
export default router
用于替代a标签,实现路径的更改(路由的切换)
<router-link to="/about">切换</router-link>
//一样可以在里面写class添加样式
该标签用于指定组件的呈现位置
将路由组件放在pages文件夹下(和components同级),用于和一般组件区分
组件的切换默认是将隐藏了的组件销毁,需要的时候再去挂载
路由组件会多两个属性,分别是route和router,route各不相同,但router是同一个,router是整个VueRouter实例对象
在routers的某一个路由里添加一个属性children:[ {},{} ] //与path,component同级,且里面的路径不需要再加/
router-link里面的to="/home/news" 得加上上级路径,即完整路径
:to="{name:'hello'}"
//不需要再写完整的路径,对于对象写法就直接替代pathto的字符串写法
:to="'/home/message/detail?id=${m.id}&title=${m.title}'"
//注意是反引号``
to的对象写法
:to="{ path:'/home/message/detail', query:{id:m.id, title:m.title} }"
接收使用:$route.query.id
:to="'/home/message/detail/${m.id}/${m.title}'"
需在对应的path里面写path:’/home/message/detail/:id/:title’ //注意冒号在前,表示占位符
对象形式只允许写name,不能写 path
在route对象里添加一个配置props,将他写成函数:
props($route){
return { id:$route.query.id, title:$route.query.title }
} //这样就可以把所有参数以props的方式传给子组件,简化代码(子组件可以不用再加前缀$route.query.id),而可以直接写id,记得用props:[]接收
是用在router-link标签里的一个属性,表示浏览器历史记录的写入方式为replace,
即替换当前记录:将当前记录销毁,换成点击之后的路径
浏览器默认写入方式为push,在栈里面追加一个记录,浏览器的后退按钮会将指针下移,前进按钮上移
不借助router-link实现路由跳转,让路由跳转更加灵活
this.$router.push({ path:’’ , query:{} }) //push方式跳转,注意是router
this.$router.replace({}) //replace方式跳转
this.$router.back() //回退,浏览器后退到前一个路由地址
this.$router.forward() //浏览器前进
this.$router.go() //传入一个数字,正数表示前进多少步,负数表示后退
让不展示的路由组件保持挂载,不被销毁
切换路由组件的时候默认会销毁之前的组件,而若不想销毁(有时候用于保存用户输入),即缓存该组件,则只需在对应位置用此标签包裹:
<keep-alive include="News"><router-view></router-view></keep-alive>
include表示选择哪个组件进行缓存(多个写成数组),使用的是组件名,不写则所有组件都不销毁
路由组件独有的生命周期钩子,用于捕获路由组件的激活状态
activated(){} //激活(展现这个组件就是激活)
deactivated(){} //失活,在这里面可以把定时器停掉,防止组件缓存导致beforeDestroy不调用
用于设定访问权限;to,from是对应路由的route属性,next是个函数,调用next()表示跳转,没调用就不跳
全局前置路由守卫(写在index.js里,与const router同级)
router.beforeEach((to,from,next)=>{})
//每一次路由切换之前被调用,以及初始化时
在路由里面添加一个配置项meta(路由元信息),里面可以写任何属性,添加一个inAuth属性用于判断是否需要鉴权
全局后置路由守卫
router.afterEach((to,from)=>{})
//每一次路由切换之后以及初始化时被调用,没有next
独享路由守卫(写在单个route对象里面)
添加一个配置:beforeEnter: (to,from,next)=>{} //只用于该组件
组件内路由守卫(写在组件里面,与name,data等平级)
hash:路径有/#,且后面的内容不发送给服务器,兼容性比较好;#及其后面的内容就是hash值
history:没有/#,所有内容都会发送给服务器,刷新可能会出问题(需后端人员解决),比较简洁
打包:npm run build