router路由简介与使用

简介: Vue Router 是 Vue.js 官方的路由管理器。它和 Vue.js 的核心深度集成,让构建单页面应用变得易如反掌。路由实际上就是可以理解为指向,就是我在页面上点击一个按钮需要跳转到对应的页面,这就是路由跳转;


image.png

本教程为入门教程,如有错误,请各位前端大佬指出。

1.什么是路由

Vue Router 是 Vue.js 官方的路由管理器。它和 Vue.js 的核心深度集成,让构建单页面应用变得易如反掌。路由实际上就是可以理解为指向,就是我在页面上点击一个按钮需要跳转到对应的页面,这就是路由跳转;

首先我们来学习三个单词(route,routes,router):

route:首先它是个单数,译为路由,即我们可以理解为单个路由或者某一个路由;

routes:它是个复数,表示多个的集合才能为复数;即我们可以理解为多个路由的集合,JS中表示多种不同状态的集合的形式只有数组和对象两种,事实上官方定义routes是一个数组;所以我们记住了,routes表示多个数组的集合;

router:译为路由器,上面都是路由,这个是路由器,我们可以理解为一个容器包含上述两个或者说它是一个管理者,负责管理上述两个;举个常见的场景的例子:当用户在页面上点击按钮的时候,这个时候router就会去routes中去查找route,就是说路由器会去路由集合中找对应的路由;

详细描述请参考官方文档router.vuejs.org/zh/guide/es…

2.安装和引用

1. npm install --save vue-router
2. 复制代码

在安装脚手架之后就生成了router/index.js。

这里需要修改router/index.js。

import Vue from 'vue'
import Router from 'vue-router'
import HelloWorld from '@/components/HelloWorld'
import HelloWorld2 from '@/components/HelloWorld2'
Vue.use(Router)
export default new Router({
    routes: [{
        //路径
        path: '/hello',
        //引入名称
        name: 'HelloWorld',
        component: HelloWorld
    }, {
        //路径
        path: '/hello2',
        //引入名称
        name: 'HelloWorld2',
        component: HelloWorld2
    }]
})
复制代码

app.vue 然后在app.vue的,router标签中就会显示HelloWorld.vue。

<template>
  <div id="app">
  QWER
   <router-view></router-view>
  </div>
</template>
<script>
export default {
  name: 'App',
  data () {
  return {
 }
}
}
</script>
<style>
</style>
复制代码

然后分别访问 http://localhost:8080/#/, http://localhost:8080/#/hello, http://localhost:8080/#/hello2就可以跳转不同的页面了

3.项目中的简单使用

现在我们做一个点击不同按钮跳转不同页面的实验,app.vue是主入口,testlink为导航,根据testlink的导航,跳转到不同页面,router-view是根据导航显示不同的view。

app.vue

<template>
  <div id="app">
   QWER
   <TestLink />
   <router-view></router-view>
  </div>
</template>
<script>
import TestLink from "./components/TestLink.vue"
export default {
  name: 'App',
  data () {
  return {
 }
},
components:{
  TestLink,
}
}
</script>
<style>
</style>
复制代码

testlink.vue(/hello是路由中配置的 随便写两个页面配置路由)

<template>
<div>
   <ul>
    <li>
      <router-link tag = "p" to ="/hello">HelloWorld1</router-link>
    </li>
    <li>
      <router-link to ="/hello2">HelloWorld2</router-link>
    </li>
   </ul>
</div>
</template>
<script>
export default {
name: 'TestLink',
data () {
  return {
}
}
}
</script>
<style>
</style>
复制代码

重定向

重定向可以配置从/a到重定向/b。这里当访问"/"时,重定向到anim的路由。/ 完成这个功能需要修改router/index.js文件。

import Vue from 'vue'
import Router from 'vue-router'
import HelloWorld from '@/components/HelloWorld'
import HelloWorld2 from '@/components/HelloWorld2'
import anim from '@/components/Anim'
Vue.use(Router)
export default new Router({
    routes: [
        //配置重定向--/的时候 跳到 anim路径
        {
            path: '/',
            redirect: "anim"
        },
        {
            //路径
            path: '/hello',
            //引入名称
            name: 'HelloWorld',
            component: HelloWorld
        }, {
            //路径
            path: '/hello2',
            //引入名称
            name: 'HelloWorld2',
            component: HelloWorld2
        },
        {
            //路径
            path: '/anim',
            //引入名称
            name: 'anim',
            component: anim
        }
    ]
})
复制代码

4.嵌套路由

一级路由下还有超链接,能够跳不同的页面,在以上代码的情况在,在进入HelloWorld页面后,还有两个超链接 能分别跳到TestNesting1和TestNesting2。以下代码实现嵌套路由的场景。

//TestNesting1两个随便的类 区别不同就可以了
<template>
<div>
   TestNesting1
</div>
</template>
<script>
export default {
name: 'TestNesting1',
data () {
  return {
}
}
}
</script>
复制代码

如上文一样 在HelloWorld中建立超链接 其中配置的是要跳入的路径加上本身路径。

<template>
<div>
      HelloWorld
      <ul>
       <li><router-link to = "/hello/TestNesting1">11111</router-link></li>
       <li><router-link to = "/hello/TestNesting2">22222</router-link></li>
      </ul>
      <router-view> </router-view>
</div>
</template>
<script>
export default {
name: 'HelloWorld',
data () {
  return {
    }
},
methods:{
}
}
复制代码

配置路由文件

import Vue from 'vue'
import Router from 'vue-router'
import HelloWorld from '@/components/HelloWorld'
import HelloWorld2 from '@/components/HelloWorld2'
import anim from '@/components/Anim'
import TestNesting1 from '@/components/TestNesting1'
import TestNesting2 from '@/components/TestNesting2'
Vue.use(Router)
export default new Router({
    routes: [{
            path: '/',
            redirect: "anim"
        },
        {
            //路径
            path: '/hello',
            //引入名称 传入参数一定要是用
            name: 'HelloWorld',
            component: HelloWorld,
            //TestNesting1的重定向
            //意味着在/hello时跳入/hello/TestNesting1 默认显示/hello/TestNesting1 首页功能
            redirect: "/hello/TestNesting1",
            //嵌套路由
            children: [
                // UserHome 会被渲染在 User 的 <router-view> 中
                {
                    //不要写/
                    path: 'TestNesting1',
                    component: TestNesting1
                },
                {
                    path: 'TestNesting2',
                    component: TestNesting2
                }
            ]
        }, {
            //路径
            path: '/hello2',
            //引入名称
            name: 'HelloWorld2',
            component: HelloWorld2
        },
        {
            //路径
            path: '/anim',
            //引入名称
            name: 'anim',
            component: anim
        }
    ]
})
复制代码

5.路由的参数传递

在跳转路由时,也可以传递参数。

首先在index.js配置参数 --需要在path后加入/:

import Vue from 'vue'
import Router from 'vue-router'
import HelloWorld from '@/components/HelloWorld'
import HelloWorld2 from '@/components/HelloWorld2'
import anim from '@/components/Anim'
import TestNesting1 from '@/components/TestNesting1'
import TestNesting2 from '@/components/TestNesting2'
Vue.use(Router)
export default new Router({
    routes: [{
            path: '/',
            redirect: "anim"
        },
        {
            //路径
            path: '/hello',
            //引入名称 传入参数一定要是用
            name: 'HelloWorld',
            component: HelloWorld,
            //TestNesting1的重定向
            //意味着在/hello时跳入/hello/TestNesting1 默认显示/hello/TestNesting1 首页功能
            redirect: "/hello/TestNesting1",
            //嵌套路由
            children: [
                // UserHome 会被渲染在 User 的 <router-view> 中
                {
                    //不要写/
                    path: 'TestNesting1',
                    component: TestNesting1
                },
                {
                    path: 'TestNesting2',
                    component: TestNesting2
                }
            ]
        }, {
            //路径
            path: '/hello2/:id/:money',
            //引入名称
            name: 'HelloWorld2',
            component: HelloWorld2
        },
        {
            //路径
            path: '/anim',
            //引入名称
            name: 'anim',
            component: anim
        }
    ]
})
复制代码

:to ="{name:'HelloWorld2',params:{id:'111',money:'3123123123'}}"中直接加入想要传递的参数即可。

<template>
<div>
   <ul>
    <li>
      <router-link to ="/anim">首页</router-link>
     </li>
    <li>
      <router-link :to ="test_router">HelloWorld1</router-link>
    </li>
    <li>
      <router-link :to ="{name:'HelloWorld2',params:{id:'111',money:'3123123123'}}">HelloWorld2</router-link>
    </li>
   </ul>
</div>
</template>
<script>
export default {
name: 'TestLink',
data () {
  return {
        test_router:"/hello"
}
}
}
</script>
<style>
</style>
复制代码

最后在被跳转页接收。

<template>
<div>
   HelloWorld2
   <p>传递的参数为{{$route.params.id}}+{{$route.params.money}}</p>
</div>
</template>
<script>
export default {
name: 'HelloWorld2',
data () {
  return {
}
}
}
</script>
复制代码

6.路由高亮

在router/index.js中加入linkActiveClass: "active"属性,他为所有的路由加入active的class,即可实现高亮。

export default new Router({
    //解决历史问题
    mode: 'history',
    //路由高亮
    linkActiveClass: "active",
    routes: [{
            path: '/',
            redirect: "anim"
        },
        {
            //路径
            path: '/hello',
            //引入名称 传入参数一定要是用
            name: 'HelloWorld',
            component: HelloWorld,
            //TestNesting1的重定向
            //意味着在/hello时跳入/hello/TestNesting1 默认显示/hello/TestNesting1 首页功能
            redirect: "/hello/TestNesting1",
            //嵌套路由
            children: [
                // UserHome 会被渲染在 User 的 <router-view> 中
                {
                    //不要写/
                    path: 'TestNesting1',
                    component: TestNesting1
                },
                {
                    path: 'TestNesting2',
                    component: TestNesting2
                }
            ]
        }, {
            //路径
            path: '/hello2/:id/:money',
            //引入名称
            name: 'HelloWorld2',
            component: HelloWorld2
        },
        {
            //路径
            path: '/anim',
            //引入名称
            name: 'anim',
            component: anim
        }
    ]
})
复制代码

然后在路由页面的css中加入以下代码,且指定颜色为红色。

1. <style>
2. .active{
3. color:red;
4. }
5. </style>


相关文章
|
6月前
|
算法 网络架构
router和route的区别?
router和route的区别?
386 0
|
1月前
|
缓存 移动开发 JavaScript
《vue2进阶篇:路由》第10章:vue-router,包括基础路由、嵌套路由、路由的query参数和params参数、命名路由、router-link的replace属性、编程式路由、缓存路由组件
《vue2进阶篇:路由》第10章:vue-router,包括基础路由、嵌套路由、路由的query参数和params参数、命名路由、router-link的replace属性、编程式路由、缓存路由组件
44 2
|
3月前
|
JavaScript
Vue中router路由的使用、router-link的使用(在项目中的实际运用方式)
这篇文章介绍了Vue中router路由和router-link的使用方式,包括router配置、router-link在模板中的使用,以及实现的导航菜单和页面路由效果。
Vue中router路由的使用、router-link的使用(在项目中的实际运用方式)
|
4月前
|
JavaScript 前端开发 API
Vue Router【详解】含路由配置、路由定义、路由跳转、路由传参、自动注册路由、路由守卫、页面滚动、监听路由、$route、$router、路由过渡动画等
Vue Router【详解】含路由配置、路由定义、路由跳转、路由传参、自动注册路由、路由守卫、页面滚动、监听路由、$route、$router、路由过渡动画等
941 0
|
5月前
|
前端开发 JavaScript 网络架构
route和router的区别
route和router的区别
65 0
|
网络架构
$router和$route的区别?
$ router是用来操作路由的,$ route是用来获取路由信息的。
|
6月前
|
JavaScript 网络架构
$route和$router的区别
$route和$router的区别
64 0
|
6月前
|
JavaScript 前端开发 API
探索应用程序的指路明灯:Route 和 Router 入门指南(上)
探索应用程序的指路明灯:Route 和 Router 入门指南(上)
探索应用程序的指路明灯:Route 和 Router 入门指南(上)
|
6月前
|
前端开发 JavaScript UED
探索应用程序的指路明灯:Route 和 Router 入门指南(下)
探索应用程序的指路明灯:Route 和 Router 入门指南(下)
探索应用程序的指路明灯:Route 和 Router 入门指南(下)
|
6月前
|
JavaScript 前端开发 网络架构
Vue3中的路由功能:安装和配置Vue Router、路由的基本用法、动态路由、嵌套路由
Vue3中的路由功能:安装和配置Vue Router、路由的基本用法、动态路由、嵌套路由
250 0