vue03-cli-Router

1.文档结构

App.vue是最大的组件,挂载静态资源index.html中的div#app
1.在这里可以引入页面导航,页脚这些固定组件
2.可以写个组件显示一级路由的视图<router-view
3.所有组件的data都要写成function return的形式

2.跳转路由的方式

  1. 插座
<router-link to="/Shangpin">商品</router-link>
<router-link :to="'/Shangpin'">商品</router-link>
  1. 插座带参
<router-link :to="{path:'/Shangpin',query:{name:'秋裤'}}">商品</router-link>
  1. 插座带参(参数不显示在链接中)
<router-link :to="{name:'myc',params:{id:'lucy0620'}}">购物车</router-link>
//index.js
 {
path:'/Curt/:id',//刷新页面数据不会丢失的写法,显示参数
component: ()=>import('../views/Curt'),
name:'myc'
},
  1. JS跳转路由
//把插座换为按钮,点击触发
toShangpin(){
   this.$router.push({path:'/Shangpin',query:{name:'冰棍'}});
}
toCurt(){
   this.$router.push({name:'myc',params:{id:'法米利尔'}});
}
//路由指向的组件 接收
this.$route.query.name
this.$route.params.id

3.懒加载路由

原始写法:

import Shangpin from "../views/Shangpin";
{
    path:'/shangpin',
    component:Shangpin
  },

优化vue项目首屏加速:

{
    path:"/shangpin",
    component: ()=>import('../views/Shangpin'),
  },

4.路由重定向-通配符路由-二级路由

  1. 重定向:输入/product,按’/Shangpin’走商品组件,重定向可传值
  {
    path:'/product',
    redirect:{path:'/Shangpin',query:{name:'秋裤2'}}
  },
  1. 通配符路由(3.x版本):处理不存在的路由情况
  {
    path:"/:pathMatch(.*)",
    component: ()=>import('../views/Err'),
  },
  1. 二级路由path不以/开头
{
    path:'/News',
    component: ()=>import('../views/News'),
    children:[
      {
        path:'Newsgirl',
         component:()=>import('../components/Newsgirl')
      },
      {
        path: 'Newshot',
        component:()=>import('../components/Newshot')
      },
    ]
  },

5.路由守卫

  1. 全局路由守卫,写在main.js中
//全局前置守卫
router.beforeEach(((to, from, next) => {
   next();//括号中填false为回到之前的路由
}))
//全局后置守卫 待路由跳转结束执行
router.afterEach((((to, from) => {
    next();
})))
  1. 组件内的路由守卫,直接写在组件中
		beforeRouteEnter (to, from, next) {
            // 在渲染该组件的对应路由被 confirm 前调用
            // 不!能!获取组件实例 `this`
            // 因为当守卫执行前,组件实例还没被创建
            next(vm=>{
                console.log('路由被改变了,组件实例的属性:',vm.name)
            });
        },
        beforeRouteUpdate (to, from, next) {
            // 在当前路由改变,但是该组件被复用时调用
            // 如带有动态参数的路径/foo/:id,在/foo/1和 /foo/2 之间跳转的时候
            next();
            console.log('组件被复用,组件实例的属性:',this.name)
        },
        beforeRouteLeave (to, from, next) {
            // 导航离开该组件的对应路由时调用
            next();
            console.log('离开组件,组件实例的属性:',this.name)
        }
  1. 独享路由首位,写在index.js中
{
    path:'/Mine',
    component:()=>import('../views/Mine'),
    //独享路由守卫
    beforeEnter:(to,from,next)=>{
      console.log('独享守卫跳转前:',to,'跳转后:',from);
      next();
    },
    children:[
      {
        path:'Mineinfo',
        component:()=>import('../components/Mineinfo'),
        meta:{requireLogin:true}//走它的子路由也守卫
      },
    ]
  },
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值