Vue官方的路由管理器Vue-router

一、 Vue-router的构成

Vue Router 是 Vue.js 官方的路由管理器。它和 Vue.js 的核心深度集成,让构建单页面应用变得易如反掌。

<router-link> 是一个组件,该组件用于渲染一个导航链接,切换不同 HTML 内容。to 属性为目标地址, 即要显示的内容。

<router-view>用于渲染路由匹配之后的显示对应内容

二、 Vue-router的基本使用

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>VUE</title>
    <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
    <script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
    <script src="js/vue-router.js" type="text/javascript" charset="utf-8"></script>
  </head>
  <body>

    <div id="app">
      <ul>
            <!-- 使用 router-link 组件来导航. -->
            <!-- 通过传入 `to` 属性指定链接. -->
            <!-- <router-link> 默认会被渲染成一个 `<a>` 标签 -->
        <li><router-link to="/">首页</router-link></li>
        <li><router-link to="/documents">文档</router-link></li>
        <li><router-link to="/download">下载</router-link></li>
      </ul>

        <!-- 路由匹配到的组件将渲染在这里 -->
      <router-view></router-view>
    </div>

    <script type="text/javascript">
      // 1创建 router 实例,然后传 `routes` 配置
      const router = new VueRouter({
        routes:[
          {
            // 2每个路由应该映射一个组件。其中"component" 可以是
            path:"/",
            component:{
              template:`
              <div>这里是首页</div>
              `
            }
          },
          {
            path:"/documents",
            component:{
              template:`
              <div>这里是文档页</div>
              `
            }
          },
          {
            path:"/download",
            component:{
              template:`
              <div>这里是下载页</div>
              `
            }
          }
        ]
      })

      const vm = new Vue({
        el:"#app",
        data:{

        },
        // 3通过 router 配置参数注入路由,
        router:router
      })
</script>
  </body>
</html>

三、this.$router 与 this.$route

this.$router 为VUE实例的属性,类似this.$data、this.$methods

拥有push、replace、go等常用方法

this.$route 代表的是当前路由

拥有name、meta、path、hash、query、params、fullPath等常用属性

四、当前激活路由

router-link 默认会渲染出a标签

当前激活的a标签会自动添加以下两个类名

router-link-exact-active 精确匹配规则

router-link-active 匹配规则

常用激活路由的样式控制

<style type="text/css">
  .router-link-exact-active{
    color: red;
  }
</style>

五、路由带参

一个“路径参数”使用冒号 : 标记。当匹配到一个路由时,参数值会被设置到 this.$route.params,可以在每个组件内使用。

定义带参路由

{
  path:"/goods/:id",
  component:{
    template:`
    <div>当前商品为:{{$route.params.id}}</div>
    `
  }
}

展示带参路由

<div>
  <div>这里是首页</div>
  <ul>
    <li v-for="i in 9">  <router-link :to="'/goods/'+i">商品{{i}}</router-link> </li>
  </ul>
</div>

六、路由嵌套

在路由/user 中包含子路由 /user/login与/user/regist两个子路由

 {
            // 定义用户路由 在组件中显示可以切换到登录注册的链接  并且需要定义用于显示子路由的router-view
            path:"/user",
            component:{
              template:`
              <div>
                <div>当前为用户页面</div>
                <ul>
                  <li><router-link to="/user/login">登录</router-link></li>
                  <li><router-link to="/user/regist">注册</router-link></li>  
                </ul>
                <router-view></router-view>
              </div>
              `              
            },
            children:[
              {
                // 定义子路由时path 不能以/开头
                path:"login",
                component:{
                  template:`
                  <div>
                  登录组件
                  </div>
                  `
                }
              },
              {
                path:"regist",
                component:{
                  template:`
                  <div>
                  注册组件
                  </div>
                  `
                }
              }
            ]
          }

七、路由重定向

对六中定义的子路由,如果想在进入时显示登录组件可以使用重定向,即在进入/user时进入/user/login

即在定义路由时使用redirect重定向

{
    path:"/user",
    redirect:"/user/login",
    ...
}

八、路由命名

在定义路由时使用name属性给路由名字

{
  // 定义子路由时path 不能以/开头
  path:"login",
  name:"login",
  ...
},
{
  path:"regist",
  name:"regist",
  ...
}

路由跳转时不需要写入绝对路径,只需要写入名字即可

//绝对路径写法
<li><router-link to="/user/login">登录</router-link></li>
<li><router-link to="/user/regist">注册</router-link></li>  
//使用路由名字写法
  <li><router-link :to="{name:'login'}">登录</router-link></li>
  <li><router-link :to="{name:'regist'}">注册</router-link></li>  

九、路由守卫

路由守卫可以分为全局路由守卫与独享路由守卫

全局路由守卫

const router = new VueRouter({ ... })

router.beforeEach((to, from, next) => {
  // ...
})

独享路由守卫

const router = new VueRouter({
  routes: [
    {
      path: '/',
      component: Home,
      beforeEnter: (to, from, next) => {
        // ...
      }
    }
  ]
})

to: Route: 即将要进入的目标路由对象

from: Route: 当前导航正要离开的路由

next: Function: 一定要调用该方法来 resolve 这个钩子。执行效果依赖 next 方法的调用参数。

使用路由守卫验证权限案例

在需要授权的路由中添加meta属性

{
    path:"/download",
    meta:{
      auth:true
    },
    component:{
      template:`
      <div>这里是下载页</div>
      `
    }
  },

在守卫中进行判断处理

router.beforeEach(function(t,f,n){
  if(t.meta.auth){
    let logined = false
    if(logined){
      n()
    } 
    else
    {
      n("/user/login?next="+t.path)
    }
  }
  else
  {
    n()
  }
  
})

更多的钩子函数可以查看官方文档

十、滚动行为

使用前端路由,当切换到新路由时,想要页面滚到顶部,或者是保持原先的滚动位置,就像重新加载页面那样。 vue-router 能做到,而且更好,它让你可以自定义路由切换时页面如何滚动。

当创建一个 Router 实例,你可以提供一个 scrollBehavior 方法:

const router = new VueRouter({
  routes: [...],
  scrollBehavior (to, from, savedPosition) {
    // return 期望滚动到哪个的位置
      if (savedPosition) {
        return savedPosition
      } else {
        return { x: 0, y: 0 }
      }
  }
})

 

 

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农NoError

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值