Vue 路由传参
动态路径传参数
比如我们要传递的路径 /hi/hahah/123 第一个是组件名 第二个,第三个是参数
(1) 路由里面配置参数
看路径 利用冒号绑定好参数
{
path:'/Hi/:username/:id',
name:"Hi",
component:Hi,
children:[
{path:"hi1",name:"Hi1",component:Hi1},
{path:"hi2",name:"Hi2",component:Hi2},
]
}
(2) 组件里面输出
{
{
$route.params.username
}
}
{
{
$route.params.id
}
}
路由跳转参数的两种方法
是利用 query 方式传递参数
是利用 params 方式传递参数
利用 query 方式传递参数
<script>
传参:
this.$router.push({
path:'/xxx'
query:{
id:id
}
})
接收参数:
this.$route.query.id
</script>
利用 params 方式传递参数
<script>
传参:
this.$router.push({
name:'xxx'
params:{
id:id
}
})
接收参数:
this.$route.params.id
</script>
注意:params 传参,push 里面只能是 name:’xxxx’,不能是 path:’/xxx’,因为 params 只能用 name 来引入路由,如果这里写成了 path,接收参数页面会是 undefined!!!另外,二者还有点区别,直白的来说 query 相当于 get 请求,页面跳转的时候,可以在地址栏看到请求参数,而 params 相当于 post 请求,参数不会再地址栏中显示.另外要是通过 query 传值,页面刷新的话参数不丢失
Vue 动画
- 想要路由有过度动画效果只需要在 router-view 外部加载一个 transition 标签即可
<transition name="gotop" model="out-in">
<router-view class="allcontent"></router-view>
</transition>
name 就是 css 类前面开头制定的名称,model 就是执行的顺序,他有两个。第一个是 out-in 第二个是 in-out
- 然后在 css 里面写
<style>
.gotop-enter-active,
.gotop-leave-active {
transition: all 0.4s linear;
}
.gotop-enter,
.gotop-leave-to {
transform: translate(0, 100%);
}
.gotop-leave,
.gotop-enter-to {
transform: translate(0, 0);
}
</style>
Vue 导航里面的钩子函数
第一种就是全局匹配 beforeeach
第二种就是单个路由下面写配置,beforeEnter
第三种就是组件里面写钩子函数 beforeRouterEnter
(1) 全局匹配
一般情况我们管这个叫路由守卫,简称全拦,他一般有 3 个参数 to from next 表示通过才跳转,一般写在 main.js 里面
to 表示要跳转的路径信息,from 表示从哪里来的,next 表示路由控制的参数,通过与否
代码如下
router.beforeEach((to, from, next) => {
// 设置延时器让created先执行在进行路由跳转
// 取出token值
let value = storgeMemery.getvalue('token') // 取出来token
setTimeout(res => {
// 判断该路由是否需要登录权限
if (to.name === 'Login') {
next()
} else {
if (value) {
next()
} else {
next({
path: '/login',
query: {
redirect: to.fullPath
} // 将跳转的路由path作为参数,登录成功后跳转到该路由
})
}
}
}, 100)
})
(2) 单个路由下配置
{
path: '/',
name: 'HelloWorld',
components: {
default: HelloWorld,
left: Hi1,
right: Hi2,
}
},
beforeEnter:(to,from,next)=>{
console.log("我进来了");
console.log(to);
console.log(from);
next()
}
(3)组件里面写钩子函数 beforeRouterEnter,beforeRouterLeave
export default {
name:"Hi2",
data(){
return {
message2:"这个就是Hi2页面"
}
},
beforeRouterEnter:(to,from,next){
console.log("我进来了")
}.
beforeRouterLeave:(to,form,next){
console.log("我离开了")
}
}