美文网首页
Vue Router

Vue Router

作者: hhaann | 来源:发表于2020-01-13 17:49 被阅读0次

    使用前,需要先安装路由。安装方法:https://router.vuejs.org/zh/installation.html

    路由配置方法
    在router文件下的index.js中导入

    import Index from '@/pages/Index'
    import Details from '@/pages/Details'
    import Routers from '@/pages/Router'
    
    Vue.use(Router)
    
    export default new Router({
     routes: [
        {
          path: '/',
          name: 'Index',
          component: Index
        },
       {
          path: '/details',
          name: 'Details',
          component: Details
        },
      {
          path: '/router',
          name: 'Routers',
          component: Routers
        },
    })
    

    路由跳转

    使用 router-link 标签,通过 to 绑定。
    如在Router.vue中,写入如下代码:

    <router-link to="/">首页</router-link>
    <router-link to="/details">查看详情</router-link>
    

    被解析为a标签,如下图所示:

    被解析后的标签

    如点击首页后:

    首页,index组件

    动态路由匹配

    路由参数变化

    假设我们一个Details组件页面中都是文章列表,每个文章都可以点击查看详情,那每个不同的文章有不同的详情地址,这是我们便需要使用“动态路径参数”。

    export default new Router({
     routes: [
       {
          // 动态路径参数 以冒号开头
          path: '/details/:id',
          name: 'Details',
          component: Details
        },
    })
    

    获取方式this.$route.params.idthis.$route.query.id

    1、this.$route.params.id

    <template>
      <div class="box">
        <router-link to="/">首页</router-link>
        <p @click="goDetails('1')">查看详情</p>
        <!--<router-link to="/details/1">查看详情</router-link>-->
      </div>
    </template>
    
    <script>
    export default {
      name: 'Router',
      data () {
        return {}
      },
      methods: {
        goDetails (id) {
          this.$router.push({
            name: 'Details',
            params: {
              id: id
            }
          })
        },
      }
    }
    </script>
    

    点击查看详情后

    2、this.$route.query.id

    <template>
      <div class="box">
        <router-link to="/">首页</router-link>
        <p @click="goDetails('1')">查看详情</p>
        <!--<router-link to="/details/1">查看详情</router-link>-->
      </div>
    </template>
    
    <script>
    export default {
      name: 'Router',
      data () {
        return {}
      },
      methods: {
        goDetails (id) {
          this.$router.push({
            path: '/details',
            query: {
              id: id
            }
          })
        },
      }
    }
    </script>
    

    同样点击查看效果后:


    this.$route.params.idthis.$route.query.id的不同为使用query最后出现的形式为?id=

    所有路径匹配
    export default new Router({
     routes: [{
          path: '*'
        }]
    })
    

    可以代表所有路径。
    使用场景:当出现任意意外情况404页面时,便可匹配此路径。

    优先级

    同一个路径可以匹配多个路由,匹配的优先级就按照路由的定义顺序:谁先定义的,谁的优先级就最高。

    导航守卫

    用于通过跳转或取消的方式守卫导航。

    全局守卫:是指路由实例上直接操作的钩子函数,特点是所有路由配置的组件都会触发,直白点就是触发路由就会触发这些钩子函数

    • beforeEach(to,from, next)
    • beforeResolve(to,from, next)
    • afterEach(to,from)

    路由守卫: 是指在单个路由配置的时候也可以设置的钩子函数

    • beforeEnter(to,from, next)

    组件守卫:是指在组件内执行的钩子函数,类似于组件内的生命周期,相当于为配置路由的组件添加的生命周期钩子函数。

    • beforeRouterEnter(to,from, next)
    • beforeRouterUpdadte(to,from, next)
    • beforeRouterLeave(to,from, next)

    参数
    to:即将要进入的目标路由对象;
    from:即将要离开的路由对象;
    next:涉及到next参数的钩子函数,必须调用next()方法来resolve这个钩子,否则路由会中断在这,不会继续往下执行
    next():进行管道中的下一个钩子。如果全部钩子执行完了,则导航的状态就是confirmed(确认的)。
    next( false )中断当前的导航。如果浏览器的 URL 改变了 (可能是用户手动或者浏览器后退按钮),那么 URL 地址会重置到from路由对应的地址。
    next( ' / ')或者next({ paht:' / ' }):跳转到一个不同的地址。当前的导航被中断,然后进行一个新的导航。可传递的参数可以是router-link标签中的to属性参数或router.push中的选项
    next( error ):如果传入next的参数是一个Error实例,则导航会被终止且该错误会被传递给router.onError()注册过的回调。

    相关文章

      网友评论

          本文标题:Vue Router

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