vue-router的详细介绍使用

什么是路由?

路由,其实就是指向的意思。例如:当我点击页面上的login按钮时,页面中就要显示login的内容,如果点击页面上的register 按钮,页面中就要显示register 的内容。login按钮 => login 内容, register按钮 => register 内容,也可以说是一种映射. 所以在页面上有两个部分,一个是点击部分,一个是点击之后,显示内容的部分。点击之后,怎么做到正确的对应,比如,我点击login 按钮,页面中怎么就正好能显示login的内容。这就要在js 文件中配置路由。

路由的基本概念

路由中有三个基本的概念: route, routes, router。

  • route,它是一条路由,由这个英文单词也可以看出来,它是单数, login按钮 => login内容, 这是一条route, register按钮 => register 内容, 这是另一条路由。
  • routes 是一组路由,把上面的每一条路由组合起来,形成一个数组。[{register 按钮 =>register内容 }, { login按钮 => login 内容}]
  • router 是一个机制,相当于一个管理者,它来管理路由。因为routes 只是定义了一组路由,它放在哪里是静止的,当真正来了请求,怎么办? 就是当用户点击home 按钮的时候,怎么办?这时router 就起作用了,它到routes 中去查找,去找到对应的 login 内容,所以页面中就显示了 login 内容。

路由的实现

  • html模板中

在vue-router中, 我们定义两个标签 和来对应点击和显示部分。 就是定义页面中点击的部分, 定义显示部分,就是点击后,区配的内容显示在什么地方。所以 还有一个非常重要的属性 to,定义点击之后,要到哪里去, 如:login

  • js 中配置路由

首先要定义route, 一条路由的实现。它是一个对象,由两个部分组成: path和component. path 指路径,component 指的是组件。如:{path:’/login’, component: login}

请看下方代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="app">
        <p>
          <!-- 使用 router-link 组件来导航. -->
          <!-- 通过传入 `to` 属性指定链接. -->
          <!-- <router-link> 默认会被渲染成一个 `<a>` 标签 -->
          <!-- 如果不想router-link渲染成a标签也可以添加tag属性然他渲染成别的元素 -->
          <router-link to="/login" tag="span">login</router-link>
          <router-link to="/register">register</router-link>
        </p>
        <!-- 路由出口 -->
        <!-- 路由匹配到的组件将渲染在这里 -->
        <router-view></router-view>
      </div>
    
</body>
</html>
<script src="https://unpkg.com/vue/dist/vue.js"></script>
<script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>
<script>
// 1. 定义 (路由) 组件。
const login = { template: '<div>login</div>' }
const register = { template: '<div>register</div>' }

// 2. 定义路由
const routes = [
  {path: '/', redirect: /login }
  { path: '/login', component: login },
  { path: '/register', component: register }
]

// 3. 创建 router 实例,然后传 `routes` 配置
const router = new VueRouter({
  routes // (缩写) 相当于 routes: routes
})

// 4. 创建和挂载根实例。
// 记得要通过 router 配置参数注入路由,
// 从而让整个应用都有路由功能
const app = new Vue({
  router
}).$mount('#app')
</script>

总结:执行过程:当用户点击 router-link 标签时,会去寻找它的 to 属性, 它的 to 属性和 js 中配置的路径{ path: ‘/login’, component: login} path 一一对应,从而找到了匹配的组件, 最后把组件渲染到 标签所在的地方。所有的这些实现才是基于hash 实现的。

设置选中路由高亮的两种方式

  • 第一种:
    router-link默认会为激活状态的元素添加类名router-link-active,我们只需给给router-link-active添加样式即可
    在这里插入图片描述
  • 第二种
    设置链接激活时使用的 CSS 类名。默认值可以通过路由的构造选项 linkActiveClass 来全局配置。
<style>
.myacitve{
	color: red;
}
</style>
// 3. 创建 router 实例,然后传 `routes` 配置
const router = new VueRouter({
  routes, // (缩写) 相当于 routes: routes
  linkActiveClass :'myacitve'//这样就会吧默认渲染的router-link-active类名改为myacitve
})

</script>

路由切换的时候添加动画的方法:

  • 1.用transition把routrt-link包起来
<transition mode="out-in">
	<router-view></router-view>
</transition>
  • 2.设置如下的两组类:
.v-enter,
.v-leave-to {
   opacity: 0;
   transform: translateX(150px);
}
.v-enter-active,
.v-leave-active {
   transition: all 0.8s ease;
}

路由传参

第一种:通过使用query方式传递参数

<router-link to="/login?id=01&name='cindy'" tag="span">login</router-link>
const login = { 
   template: '<div>{{$route.query.id}}</div>' ,
   created () {
     console.log(this.$route.query.name)
     console.log(this.$route.query.id)
   }
 }

第二种:通过使用params方式传递动态参数

<!-- params -->
<router-link to="/register/02/cindy" tag="span">register</router-link>
const register = { 
    template: '<div>{{this.$route.params.id}}{{this.$route.params.name}}</div>' ,
    created(){
      console.log(this.$route.params.id)
      console.log(this.$route.params.name)
    }
    }
 const routes = [
    { path: '/login', component: login },
    { path: '/register/:id/:name', component: register }
  ]

路由嵌套

<div id="app">
  <router-link to="/acount" tag="span">acount</router-link>
</body>
</html>
<script src="https://unpkg.com/vue/dist/vue.js"></script>
<script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>
<script>
  // 1. 定义 (父路由) 组件。
 <div id="app">
  <router-link to="/acount" tag="span">acount</router-link>
</body>
</html>
<script src="https://unpkg.com/vue/dist/vue.js"></script>
<script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>
<script>
  // 1. 定义 (父路由) 组件。
  const acount = { 
    template: `
    <div>
      <h1>acount</h1>
      <router-link to="/acount/login" tag="span">login</router-link>
      <router-link to="/acount/register" tag="span">register</router-link>
      <router-view></router-view>
      // 注意记得加容器
    </div>
    ` ,
  }
  // 2. 定义 (子路由) 组件。
  const login = { 
    template: '<h1>login</h1>' ,
  }
  const register = { 
    template: '<h1>register</h1>' ,
  }
  

  // 3. 定义路由规则
  const routes = [
    { 
      path: '/acount', 
      component: acount ,
      children:[
        // 注意path前面不要加/
        {path:'login',component:login},
        {path:'register',component:register}
      ]
      },
  ]

  // 4. 创建 router 实例,然后传 `routes` 配置
  const router = new VueRouter({
    routes, // (缩写) 相当于 routes: routes
    linkActiveClass: 'myacitve'
  })

  // 5. 创建和挂载根实例。
  // 记得要通过 router 配置参数注入路由,
  // 从而让整个应用都有路由功能
  const app = new Vue({
    router
  }).$mount('#app')
</script>

命名视图

  • 同时 (同级) 展示多个视图,而不是嵌套展示,如果 router-view 没有设置名字,那么默认为 default
  <'router-view></router-view'>
  <'router-view name="a"></router-view'>
  <'router-view name="b"></router-view'>
  • 对于同个路由,多个视图就需要多个组件。使用 components 配置
  const router = new VueRouter({
    routes: [
      {
        path: '/',
        components: {
          default: Foo,
          a: Bar,
          b: Baz
        }
      }
    ]
  })

以上就是我对vue-router的理解,如有疑问欢迎评论指正!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值