美文网首页
vue 路由进阶

vue 路由进阶

作者: 幻影翔 | 来源:发表于2019-12-08 11:21 被阅读0次

路由组件传参

布尔模式

设置props: true 会利用里面的参数使用route.params的作为组件的属性

{
  // 动态路由
  path: '/argu/:name',
  name: 'argu',
  component: () => import('@/views/argu.vue'),
  props: true
},
// argu.vue
<template>
    <div>
        hello {{name }}
    </div>
</template>
<script>
    export default {
    props: {
    name: {
        type: String,
        default: 'jack006'
      }
    }
  }
<script>

对象模式

props: {
        food: 'banana'
    }

export default {
props: {
    food: {
        type: String,
            default: 'orange'
    }
  }
}

参数模式

props: route => ({
                food: route.query.food
            })
// 组件设置 
props: {
  food: {
        name: String,
        default: 'apple'
     }
},

HTML5 History 模式

const router = new VueRouter({
   //http://localhost:8080/#/
  // 默认hash模式,链接带#号,history不带#,此时没有匹配到链接会指向index.html,且在路由列表**最后**中配置一个任意执行的路径
  mode: 'history',  
  routes
})
// 路由列表最后(组件匹配顺序是从上到下的)
{
path: '*',
component: () => import('@/views/error_404.vue')
}

导航守卫

在路由发生跳转到导航结束这段时间内能做相应逻辑处理(例如: 权限处理,用户登录)

  • 前置守卫

    const HAS_LOGIN = true
    // 前置守卫
    router.beforeEach((to,from,next) => {
     if(to.name !== 'login'){
        if(HAS_LOGIN) next()
        else next({name: 'login'})
      }else {
        if (HAS_LOGIN) next({name: 'home'})
        else next()
      }  
    })
    
  • 导航守卫

    // 导航被确认之前
    //router.beforeResolve()
    
  • 后置后卫

    // 后置钩子
    router.afterEach((to,form,next) => {
      //loging = false
    })
    
  • 独享守卫

      {
        path: '/',
        name: 'home',
        alias: '/home_page',
        component: Home,
        props: route => ({
            food: route.query.food
        }),
        // 路由独享守卫
        beforeEnter:((to,form,next) =>{
          if(form.name === 'login') alert("这是从登录也来的")
              else alert('不知道从哪来的')
              next()  //不能少
          })
    },
    
  • 组件内守卫

    beforeRouteEnter (to,form,next){
      // this在此无法获取组件实例,但可以在next中获取
      next(vm =>{
          //vm 为当前组件
          console.log(vm)
      })
    },
    beforeRouteLeave (to,form,next) {
      const leave = confirm('您确定要离开吗?')
      if (leave) next()
      else next(false)
    },
    beforeRouteUpdate (to,form,next){
        //
    }
    

路由导航解析过程

/**
 * 导航解析流程
 * 1、在导航被触发
 * 2、在失活的组件(即将离开的页面组件)里面条用离开守卫 beforeRouteLeave
 * 3、调用全局的前置守卫 beforeEach
 * 4、在重用的组件里调用 beforeRouteUpdate
  * 5、调用路由的独享守卫 beforeEnter
 * 6、异步解析路由组件
 * 7、在被激活的组件(即将进入的页面组件)里调用 beforeRouteEnter(this还不能用)
 * 8、调用全局的解析守卫 beforeResolve
 * 9、导航被确认
 * 10、调用全局的后置守卫 afterEach
 * 11、触发DOM更新
 * 12、用创建好的实例调用 beforeRouteEnter 守卫里传给next的回调函数
 */

路由元信息

// 路由列表加入
meta: {
        title: '关于'
    }
// 前置守卫中设置
router.beforeEach((to,from,next) => {
  to.meta  && setTitle(to.meta.title)
}
export const setTitle = (title) => {
    window.document.title = title || 'admin'
}

过渡效果

// index.js中
<transition-group name="router">
    <router-view key="default"/>
    <router-view key="email" name="email"/>
    <router-view key="tel" name="tel"/>
</transition-group>

<style lang="less">
 .router-enter{
   opacity: 0;
}
.router-enter-active{
    transition: opacity is ease;
}
.router-enter-to{
    opacity: 1;
}
.router-leave{
    opacity: 1;
}
.router-leave-active{
    transition: opacity is ease;
}
.router-leave-to{
    opacity: 0;
}
</style>

相关文章

  • vue 路由进阶

    路由组件传参 布尔模式 设置props: true 会利用里面的参数使用route.params的作为组件的属性...

  • VUE进阶 - 路由

    路由守卫,元信息,路由权限,动态路由 路由的生命周期函数,每次跳转页面都会触发所有生命周期函数在路由中判断权限的用...

  • Vue应用

    Vue项目 Vue结构 Vue项目打包与发布 Vue语法二 Vue网络请求 Vue路由 动态路由 编程式路由导航

  • Vue CLI——路由传参 & 路由进阶 & 路由缓存

    一、路由传参 1. params 参数 (1)params 参数 路由配置 页面 (2)v-html指令 v-ht...

  • vue路由、自定义指令、脚手架

    *Vue vue-router 一、路由 一、导航式路由 路由路径由

  • Vue路由

    一、Vue路由基础用法: 二、Vue路由配置的抽出 三、路由动态传值: 四、路由的跳转方式: 五、路由的hash模...

  • 手写 Vue Router、手写响应式实现、虚拟 DOM 和 D

    Vue-Router 原理实现 一、Vue-Router 动态路由 二、Vue-Router 嵌套路由 三、Vue...

  • vue.js路由vue-router(二)——路由进阶

    导航钩子 导航钩子类似于生命周期钩子,包含路由进入前,进入后,更新时,退出前等几个周期,主要用于控制导航的前进后退...

  • 2018-09-19 vue 八

    一 :路由路由:vue-router是Vue的工具库 vue-router.js下载:npm install ...

  • 6 VUE路由

    vue-> SPA应用,单页面应用(引入vue-router.js) 路由嵌套(多层路由): 路由其他信息:

网友评论

      本文标题:vue 路由进阶

      本文链接:https://www.haomeiwen.com/subject/ditmgctx.html