1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
| 1 工作模式 history: createWebHashHistory() 哈希路由 history: createWebHistory() 历史模式
to的两种写法 <RouterLink to="/care" active-class="active">关于</RouterLink>这种也可写成模板字符串 :to=" `/path?id={{id}}` " <RouterLink :to="{path:'/care'}" active-class="active">关于</RouterLink>
2 命名路由 当路由有name时,可以通过name跳转 { path: '/index', name: 'home', component: HomeView }, <RouterLink :to="{name:'/home'}" active-class="active">关于</RouterLink>
3 嵌套路由 { path: '/index', name: 'home', component: HomeView children:[ {path:'detail',component:Detail} ] }, <RouterLink to="/home/detail'}">详情</RouterLink>
4 路由传参query 字符串 <RouterLink to="/home/detail?id=99'}">详情</RouterLink> 对象写法 <RouterLink :to="{path:'/home',query:{id:uid}}'}">详情</RouterLink>
route是路由,用来拿当前路由里的参数 this.$route.path router是路由管理器,用来执行一些跳转操作this.$rouer.push('/home') V3里写成了hooks,使用useRoute来获取传参
const route = useRoute() const {query}= toRefs(route) 解构赋值不加toRefs会失去响应式
5 路由传参params 字符串<RouterLink to="/home/detail/张三/99'}">详情</RouterLink> 要在路由里定义接收的参数名(下边对象写法一样) { path: '/home',, component: HomeView children:[ {name:'detail',path:'detail/:name/:age',component:Detail} //这里定义接收的参数名 ] },
对象写法<RouterLink :to="{name:'detail',params:{id:uid}}'}">详情</RouterLink> 坑:1对象写法不能用path只能用name 2对象写法params里的参数不能是对象和数组,如id:[1,2,3],(即path:'/home/:data',data是对象或数组,跳转时页面刷新会丢失数据) 3如果路由里有接收参数,但是没传会报错,需要加问号 path:'detail/:name?/:age?
6 props配置 { path: '/home',, component: HomeView children:[ {name:'detail',path:'detail/:name/:age',component:Detail,props:true} / ] }, 第一种写法,添加props:true,会将接收的params以props传给Detail组件,<Detail :name="name",:age="age" /> 此时可以用props接收参数并使用 defineProps([name,age])
第二种-函数写法,添加props(val){return{x:100,y:200}}, val就是route,包含所有参数 props(route){return{x:route.query.name,y:route.params.id+1}} 可以把任意参数用props传给组件,并且进行加工处理
第三种-对象写法,props:{x:100,y:200}但这种拿不到route参数,没啥用
区别 query 传参配置的是 path,而 params 传参配置的是name,且在 params中配置 path 无效 query传递的参数会显示在地址栏中,而params传参不会 query传参刷新页面数据不会消失,而params传参刷新页面数据会消失 params可以使用动态传参,动态传参的数据会显示在地址栏中,且刷新页面不会消失,因此可以使用动态params传参,根据动态传递参数在传递页面获取数据,以防页面刷新数据消失(即path:'/home/:id')
7 replace跳转 <RouterLink replace to="/home}">首页</RouterLink> 默认页面跳转是push方式,添加replace后就不能后退页面了
8 编程式导航 const router= useRouter() router.push('/home') router.replace({name:'detail',params:{}})
9 路由重定向 { path: '/',, redirect:'/home' },
|