随手vue笔记 (五)

1、Vue-Router路由器

vue想要实现页面的切换需要用到vue-router,这话好像有点多余。

对应的标签 router-link  to

<router-link to="/about">About</router-link>

注意: vue2.0 需要 vue-router3.0版本。

 需要导航高亮的只要加active样式就可以了  

<router-link to="/about" class="list-group-item active">About</router-link>

或者

<router-link to="/about" class="list-group-item " active-class="active">About</router-link>

 

 2、路由种的传参, query 传参

 <li v-for="m in messageList" :key="m.id">
     <router-link to="/Home/Message/Detail?id=6666&name='哈哈'">{{m.title}}</router-link>
 </li>

接收

  <h2>{{$route.query.id}}</h2>
  <h2>{{$route.query.name}}</h2>

或者这样

 <router-link :to="{path:'/home/message/details',query:{id:m.id,title:m.title}}">{{m.title}}</router-link>

 接收方式相同

<li>消息编号:{{$route.query.id}}</li>
<li>消息标题:{{$route.query.title}}</li>

 

3、路由种的传参, params传参

  path: '/',
    name: 'Home',
    component: Home,
    children:[{
      path:'Message',
      component:Message,
      children:[{
        name:'xiangqing',
        path:'Detail/:id/:title', //通过占位符先占个坑
        component:Detail,
      }]
    }]

用法

<li v-for="m in messageList" :key="m.id">
      <router-link to="/Home/Message/Detail/6666/'哈哈'">{{m.title}}</router-link>
 </li> 

接收

<li>消息编号:{{$route.params.id}}</li>
<li>消息标题:{{$route.params.title}}</li>

 4、编程式路由

1、作用:不借助<router-link>实现路由模块,让路由跳转更灵活

 2、编码:
<button @click="pushShow(m)">push查看</button>
<button @click="replaceShow(m)">replace查看</button>
methods:{
        pushShow(m){
            this.$router.push({
                name:'xiangqing',
                query:{
                    id:m.id,
                    title:m.title
                }
            })
        },
        replaceShow(m){
            this.$router.replace({
                name:'xiangqing',
                query:{
                    id:m.id,
                    title:m.title
                }
            })
        }
    }

5、缓存路由组件

1、作用:让不展示的路由组件保持挂载,不被销毁。

2、具体代码:
<keep-alive include="News">
      <router-view></router-view>
</keep-alive>

6、路由守卫

1、作用:对路由进行权限控制;

2、分类:全局守卫、独享守卫、组件内守卫;

3、全局守卫:

全局前置守卫,初始化时执行,每次路由切换前执行

outer.beforeEach((to,from,next)=>{
   if(to.meta.isAuth){//判断是否需要鉴权
        if(localStorage.getItem('school')==='hkd'){
            next()
        }
    }
    else{
        next()
    } 
})

全局后置路由守卫,初始化时执行,每次路由切换之后被调用

router.afterEach(()=>{
    if(to.meta.isAuth){//判断是否需要鉴权
        document.title=to.meta.title
    }
    else{
        document.title='vue_test' //修改title内容
    }
})

4、独享路由守卫:某一个路由所独享的;

beforeEnter:(to,from,next)=>{
   if(to.meta.isAuth){//判断是否需要鉴权
          if(localStorage.getItem('school')==='hkd'){
               next()
        }
    }
    else{
            next()
     }
 }

5、组件内路由守卫

//通过路由规则进入该组件时调用
    beforeRouteEnter(to,from,next){
      console.log('beforeRouteEnter');
      if(to.meta.isAuth){//判断是否需要鉴权
        if(localStorage.getItem('school')==='hkd'){
            next()
        }
    }
    else{
        next()
    }
    },
    //通过路由规则离开该组件时调用
    beforeRouteLeave(to,from,next){
      next()
    }

7、去掉地址栏中的#号

const router = new VueRouter({
  mode:'history',  //hash 是有#的,history 是没有的
  routes
})

 

 

 

 

 

 

 

posted @ 2022-08-02 16:40  幽冥狂_七  阅读(30)  评论(0编辑  收藏  举报