引入
npm install vue-router@next
使用
首先入口文件
import { createRouter,createWebHistory,createMemoryHistory,createWebHashHistory } from 'vue-router'
const router = createRouter({
history: createWebHistory()
history: createMemoryHistory()
history: createWebHashHistory()
routers:[
{path:'/', component:comp1},
]
})
createApp(App)
.use(router)
.mount('#app')
特性:动态路由
router.addRoute({
path: '/about',
name: 'about',
component: () => import('./about.vue')
})
router.addRoute('about', {
path: '/about/info',
name: 'info',
component: {
render(){
retturn h('div', 'info page')
}
}
})
组件中使用
import { reactive, toRefs } from 'vue'
import { useRouter,useRoute,onBeforeRouteLeave } from 'vue-router'
setup(){
const data1 = reactive({count:1})
const router = useRouter()
const route = useRoute()
watch(() => route.query, (query) =>{
console.log(query)
})
onBeforeRouteLeave((to, from) => {
const answer = window.confirm('确定离开页面?')
if(!answer){
return false
}
})
return{
...toRefs(data1),
goBack(){
router.push('/')
}
}
}
对导航链接做深层次包装
<template>
<div :class="{active: isActive}" @click="navigate">
{{route.name}}
</div>
</template>
<srcipt>
import {RouterLink, useLink} from 'vue-router'
export default {
props: {
...RouterLink.props,
customClass: String,
},
setup(props){
const { route, href ,isActtive, isExactActive, navigate } = useLink(props)
return { route ,isActtive, navigate }
}
}
<srcipt>