vue-router路由管理器的使用

一.vue-router路由入门

1.什么是router(路由)?

这里的路由并不是指我们平时所说的硬件路由器,在vue里是指单页应用的路径管理器,再通俗点来说,vue-router就是我们WebApp的链接路径管理系统。
有的小伙伴会有疑虑,为什么我们不能像原来一样直接用标签编写链接哪?因为我们用Vue作的都是单页应用,就相当于只有一个主的index.html页面,所以你写的标签是不起作用的,你必须使用vue-router来进行管理。
接着上一篇vue-cli里的vueclitest继续操作:
因为vue-router是一个插件包,所以我们还是需要用npm来进行安装的。打开命令行工具,进入你的项目目录,输入下面命令:

cnpm install vue-router --save-dev

2.打开src/router/index.js文件可以看到以下内容:

import Vue from 'Vue';//引入Vue
import VueRouter from 'vue-router';//引入vue-router,这里的对象名可以自己定义,但定义后下面全局包括new都要使用同一个名字
import HelloWorld from "@/component/Hello";//引入HelloWorld.vue组件Vue.use(VueRouter);//全局使用vue-router
export default new VueRouter({//暴露一个路由对象,相当于官网里面的3.实例化路由对象
routes:[//路由配置,是数组
{//每一个规则都是一个对象
path:'/',//链接路径
name:''HelloWorld'',//路由名字
component:HelloWorld //对应的组件模板
}
]
})

上面的path的意思是:在根目录下关联的是HelloWorld这个组件.new VueRouter是实例化路由对象

3.根据上面的案例,我们再写一个hi的组件:

第一步:根据HelloWorld.vue,我们创建一个hi.vue组件,内容如下:

<template><div><h3>{{message}}</h3></div>
</template>
<script>export default {name:'hi',data() {return {message:'我是hi页面'}},}
</script>
<style></style>

回到router/index.js页面
第二步:引入hi.vue组件

import hi from "../components/hi.vue"

第三步:再增加一个路由规则:

{
path:"/hi",
name:'hi',
component:hi
}

最终打开http://localhost:8080/#/hi,显示如下:

4.使用router-link制作一个简单的导航

回到App.vue大组件页面:增加两个router-link标签,使用to分别跳转到首页和hi页面.

最后实现效果:

5.附上官网路由案例:

操作步骤:

0.定义一个html结构:

    <div id="app"><!-- 入口:使用router-link组件来导航,它会解析为a标签 --><router-link to="/man">男</router-link><router-link to="/women">女</router-link><!-- 出口:渲染内容 --><router-view></router-view></div>

先导入vue和vue-router文件,可以自己下载在本地导入,但前后文件不能颠倒,要先导入vue在vue-router,不然会报错,官方在线导入如下:

<script src="https://unpkg.com/vue/dist/vue.js"></script>
<script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>

1.写组件

//也可以使用import XX from './XX'从其它文件中引进来const Man= {//对象template:'<div>我是男生</div>'};const Women={template:'<div>我是女生</div>'};

2.写路由规则(配置路由单词用的是routes),里面写path路径和component组件

        const routes =[//数组,里面存对象,可以是多个对象,中间用逗号隔开{path:"/man",//写to的路径名component:Man//写组件名},{path:"/women",component:Women}]

3.实例化路由对象,传入定义的路由规则(路由对象单词是用的router)

    const router =new VueRouter({//里面传入对象routes//相当与于routes:routes// routes:routes123//属性名一定要routes,这是作者规定的,值名可以自己定义和路由规则一样就可以了})

4.实例化Vue对象,把元素和路由对象传入到Vue实例中

        let app=new Vue({el:"#app",router //路由对象})

案例效果:

二.制作一个子路由(项目中经常用,很重要)

子路由一般用在一个页面有自己的基础模板,然后在它的下面的页面都属于这个模板,只是部分改变样式.
如下图,我们要实现首页下面拥有首页样式的两个子页面.

操作步骤如下:
1.在App.vue入口文件里面,增加三个首页,子页面1,子页面2的router-link标签,在to属性里,写上各自要跳转的地址.

<router-link to="/">首页</router-link>
<router-link to="/hi1">子页面1</router-link>
<router-link to="/hi2">子页面2</router-link>

2.在components文件夹里创建两个hi1和hi2组件

3.回到router/index.js里,在路由文件里引入上面两个组件;

import hi1 from "../components/hi1";
import hi2 from "@/components/hi2.vue"

4.在路由规则里加上children里用path(关联router-link的to值)和component(关联组件名)绑定;

5.回到components/main.vue首页,将子组件的出口用router-view渲染在主页面即可.

三.vue-router如何参数传递

1.用name传递参数(这种方法很少用)

分为两步:
a.在src/router/index.js里面配置name属性;
b.在src/App.vue模板里用$route.name的形式接收就好;


注意点:如果路由里面还有子路由,不用写name,如果写name控制台会提示.如下图(这图相当于一个面包屑导航):

2.利用router-link中的to标签(这种方法常用,而且可以传递多个值)

比如有一个需求:我们要将App.vue里面的username和id传递到模板,最后在页面中显示.操作方法如下:
a.在App.vue页面的router-link标签里用to进行绑定,

<router-link :to={name:XXX,params:{username:'JSPang',id=888}}>

说明:
to:注意to一定要加冒号进行绑定,里面是对象的形式;
name:要和我们在路由规则文件中的name值保持一致;

params:这里就是我们要传的参数,是对象形式,里面可以传递多个值.
b.回到要hi11.vue组件模板,在模板里用插值模板的$route.params.username进行接收

{{$route.params.username}}

整体操作图如下:

3.还有一种是老程序员用url传递参数的方法,详见第五节
以上路由传参主要是使用第二种方法,
同时总结路由中name的两个作用:
1.用name来传递参数;
2.在router-ling的to传参时起到名称的作用.

四.单页面多路由区域操作(这在项目中开发很常见,要掌握哦)

需求:在一个页面我们有2个以上router-view区域,并且输入不同的网址下面显示不一样的内容,我们可以通过配置路由的js文件来操作这些区域的内容,操作过程如下
1.新建一个vuerouter项目,新建命令如下:

vue init webpack vuerouter

2.在src/App.vue里新建两个router-view标签,并各自命名

    <router-view></router-view><router-view name="left"></router-view><router-view name="right"></router-view>

3.在components/Hello.vue(把HelloWorld组件名字改为Hello),并删掉里面多余的内容,只留如图:

4.在components文件夹里新建两个Hi1和Hi2页面;

5.在router/index.js引入Hi1和Hi2组件:

import Hi1 from '@/components/Hi1'
import Hi2 from '@/components/Hi2'

6.在router/index.js里面写路由配置

export default new Router({routes: [{path: '/',name: 'Hello',components: {//特别留意这里是复数,单数的话会报错default:Hello,left:Hi1,right:Hi2}}]
})

注意:componets要写复数,left是对应router-view里的name值.

上面实现效果:

7.回到App.vue我们给它加点样式:

<router-view name="left" style="float:left;width:50%;height:300px;background-color:#ccc"></router-view>
<router-view name="right" style="float:left;width:50%;height:300px;background-color:#c0c"></router-view>

变成如下效果:

8.回到router/index.js里,增加一个路由配置,并修改里面的path和颠倒left和right里的值.

export default new Router({routes: [{path: '/',name: 'Hello',components: {//特别留意这里是复数,单数的话会报错default:Hello,left:Hi1,right:Hi2}},{path:"/jspang",name:"Hello",components:{default:Hello,left:Hi2,right:Hi1}}]
})

最后我们在浏览器里输入带有jspang的网址时内容就变了.

五.vue-router利用url传递参数

在实际开发也是有很多用URL传值的需求,比如我们在新闻列表中有很多新闻标题整齐的排列,我们需要点击每个新闻标题打开不同的新闻内容,这时在跳转路由时跟上新闻编号就十分实用。操作步骤如下:
1.在router/index.js里,准备好路由配置,在path里面,传递参数的格式用冒号进行绑定键

import Vue from 'vue'
import Router from 'vue-router'
import Hello from '@/components/Hello'import Params from "@/components/params"Vue.use(Router)export default new Router({routes: [{path: '/',name: 'Hello',components: Hello},{path:"/params/:newsId/:newsTitle",//传递参数的格式:冒号(进行绑定)跟上键component:Params}]
})

2.回到App.vue里面,增加两个router-link标签,在to里面跟上参数,写的格式/键值1/键值2(与上面绑定的userId和newsTitle保持一致)

 <router-link to="/">home</router-link><router-link to="/params/198/jspang website is very good">params</router-link>

3.回到src/components/params页面用插值方式渲染页面,格式:{{$route.params.键名}}

<p>newsId:{{$route.params.newsId}}-newsTitle:{{$route.params.newsTitle}}</p>

$route.params里面的内容:就是是一个对象,里面存了上面的内容.

最终显示效果如下:

上面有一个问题,我们可以把newsId改为aaa,也能传递,但这是不对的,我们怎样限定只能传递数字呢?方法如下:
其实很简单,
只需在path里面键后加括号,里面写上正则就行

path:"/params/:newsId(/\d+/)/:newsTitle",//传递参数的格式:冒号(进行绑定)跟上键

/\d+/:是正则,限定只能数字.
这样的结果如果还是aaa,内容就无法显示了(地址有,但页面无法显示)

六,七.vue-router的重定向(redirect)和别名(alias).

1.redirect重定向

a.开发中有时候我们虽然设置的路径不一致,但是我们希望跳转到同一个页面,或者说是打开同一个组件。这时候我们就用到了路由的重新定向redirect参数。重定向redirect操作如下:

只需在/src/router/index.js中,我们把原来的component换成redirect参数就可以了

b.我们重定向是如果也要传递参数怎么操作?首先,path里面正常写地址和要跟的参数,另外我们需要在redirect后面的参数里复制重定向路径的path参数就可以了.


附官网重定向知识:

2.alias别名

上节学习了路由的重定向,我相信大家已经可以熟练使用redirect进行重定向了。使用alias别名的形式,我们也可以实现类似重定向的效果。
先创立一个Hi1组件;

a.我们在router/index.js里,Hi1路由配置的component后面加上alias,后面跟上一个别名jspang.

    {path:"/Hi1",component:Hi1,alias:"/jspang"},

b.回到App.vue里,增加一个router-link标签,在to里跟上别名值

 <router-link to="/jspang">jspang</router-link>

实现效果:

总结重定向和别名的区别:
redirect重定向:是改变了真实的url地址,使之显示原来的页面.
alias别名:url地址没有改变,只是router-view内容显示了原来真实的页面.
从体验角度来说,别名的体验会更好.

八.路由的过渡动画

1.要想过渡有动画,在App.vue里增加transition标签,里面要定义name属性

<transiton name="v" mode="out-in"><router-view></router-view>
</transition>

说明:
mode是过渡的模式:
in-out(默认状态):新元素先过渡进入,完成后老元素过渡离开;
out-in:老元素先过渡离开,完成后新元素过渡进入;
这次我们用mode的out-in模式

2.写CSS样式

组件过渡过程中,会有6个CSS样式类名进行切换,这6个类名与transition的name属性有关,比如name=“v”,会有如下6个类名:

所以我们写样式如下:

.v-enter{opacity: 0;/* o代表透明 */
}
.v-enter-active{transition: opacity .5s;}
.v-leave{opacity: 1;
}
.v-leave-active{opacity: 0;transition: opacity .5s;
}

最终打开不同的页面就自然有过渡效果了.

九.路由配置中mode的设置和404页面的处理.

在学习过渡效果的时候,我们学了mode的设置,但是在路由的属性中还有一个mode。这节课我们就学习一下另一个mode模式和404页面的设置。

1.路由配置中mode有两个值:

一个是histroy,URL是正常的地址,没有带#;
另一个是hash(默认值),根目录会多个"#";

2.404页面

用户会经常输错页面,当用户输错页面时,我们希望给他一个友好的提示,为此美工都会设计一个漂亮的页面,这个页面就是我们常说的404页面。vue-router也为我们提供了这样的机制.操作过程如下:
1.设置路由配置
引入组件:

import Error from "@/components/404.vue"

配置路由

{path:"*",
component:Error
}

这里的path:’*’就是找不到页面时的配置
2.新建一个404.vue页面

<template><div><h2>{{ msg }}</h2></div>
</template>
<script>
export default {data () {return {msg: 'Error:404'}}
}
</script>

3.在App.vue里用router-link瞎写一个标签的路径

<router-link to="/bbbb">我是瞎写的</router-link>

最终效果:

十.路由中的构子函数

路由中的构子函数写法有两种:

1.写在路由配置里的构子函数(写在路由配置里的构子函数只有一个,就是beforeEnter);

 {path:"/params/:newsId/:newsTitle",//传递参数的格式:冒号(进行绑定)跟上键component:Params,// 这里配置路由函数,一定要跟箭头函数beforeEnter:(to,from,next)=>{//这三个参数都是对象console.log(to);//to是进入的信息,这里还有params传递的信息console.log(from);//from是来的信息console.log(next);//没有发现信息next()//这里记得要next下去,不然不会接着下一步哦}},

上面的beforeEnter就是构造函数,注意写法是箭头函数,而且要next下去,没有next的话不会跳转.next也可以写成next(true),默认就是这个,如果next(false)跟不写next效果一样,next里面也可以先写跳转到根目录(写法next({path:"/"}))
三个参数:
a.to:路由将要跳转的路径信息,信息是办好在对象里面的;
b.from:路由跳转前的路径信息,也是对象的形式;
c.next:路径的控制参数,相当于开关,常用的有next(true)和next(false).

2.写在模板中的构子函数(写在模板里的构子函数有两个:beforeRouteEnter和beforeRouteLeave)

在params.vue里写这两个进入和离开的构子函数构子函数,操作如下:

总结:params.vue模板里的路由构子函数,它可以监控到路由的进入和路由的离开,也可以轻易的读取to和from的值.

十一.编程式导航

上面10节使用router-link to跳转的方式叫做声明式导航,而与之对应的就是编程式导航.
那什么是编程式导航呢?其实就是在页面逻辑代码中需要跳转页面的操作就是编程式导航.

1.编程式导航里的前进和后退

写法如下:

2.编程式导航里的跳转到指定页

比如我们在登录页时判断用户名和密码正确时,需要跳转到首页或者用户中心页面就用这种导航方式.
写法如下:

路由参数传递总结:
传送门:https://www.cnblogs.com/luxiaoxing/p/7564580.html
一般有两种参数传递:
1.a标签的跳转传递(含带参数和不带参数);
2.点击编程式导航传递;
下面分别演示
1.准备一个传参的页面:

说明:routerLink中的to跟着的分别是path(对应路由配置里的path),参数是query.
点击后各自的路径如下:

注意:Hello.vue编程式导航里的$router是用来传递参数的,而Hi.vue中的$route是用来接收参数的。

2.准备一个接收参数的页面

说明:
params对应的是路由配置path里的斜杠跟着的信息;

query对应的是routerLink to里面写饿query参数信息;

3.设置好路由

4.在传参页面点击后效果如下

补充:路由懒加载的方式:

到此,路由已完结.

vue-router路由管理器的使用相关推荐

  1. Vue Router路由管理器

    目录: 相关理解 基本路由 几个注意事项 嵌套(多级)路由 路由的query参数 命名路由 路由的params参数 路由的props配置 路由跳转的replace方法 编程式路由导航 缓存路由组件 a ...

  2. Vue中路由管理器Vue Router使用介绍(三)

    2019独角兽企业重金招聘Python工程师标准>>> 一.路由定义添加动态参数定义 1.路由定义项,使用:xx 方式 定义动态参数 {path:'/user/:id/:name', ...

  3. Vue Router 路由管理

    文章目录 Vue Router 路由管理 概述 安装 简单使用 定义2个组件 定义路由信息 支持路由 使用路由 动态路由 配置动态路由 配置404 限制动态参数 嵌套路由 命名路由 编程式导航 简单使 ...

  4. Vue | Vue Router 路由的使用

    文章目录 一.路由的基本使用 1.创建 Vue 项目并引入 vue-router 2.编写 Components 组件 3.编写路由文件 4.在主文件 Main.js 中引入路由 5.添加 route ...

  5. Vue 学习(十、 Vue Router - 路由插件 和 Vue 的插件原理)

    文章目录 一.Vue Router - 路由插件 1. 安装 Vue Router 2. Vue Router 路由的基本使用 3. 设置 router-link 4. 编程式路由 5. 路由嵌套 6 ...

  6. vue项目没有router文件夹_vue项目——Vue Router路由的使用

    前言: 学习vue也有一段时间了,这里把学习整个vue项目中的一些知识点和问题,整理下方便自己记录,也希望给大家带来方便.我会连续写几篇系统的文章,讲解一个完整的vue项目中用到的各个使用模块.今天先 ...

  7. Vue Router路由常用功能总结

    Vue Router路由常用功能总结 一.前言 二.安装 1. vueCLI安装 2. npm安装 三.路由配置及使用: 1. 基本配置: 2. 动态路由: 3. 嵌套路由: 四.编程式的导航 五.重 ...

  8. 【Vue】相关生态——Vue Router路由

    Vue Router路由 基本使用 带参数的动态路由匹配 捕获所有路由或404 Not found 路由 嵌套路由 编程式导航 重定向和别名 将props传递给路由组件 不同的历史模式 进阶 导航守卫 ...

  9. 24.Vue路由管理器:Router(进阶篇)

    导航守卫 vue-router 提供的导航守卫主要用来通过跳转或取消的方式守卫导航.有多种机会植入路由导航过程中:全局的, 单个路由独享的, 或者组件级的.其实,导航守卫就是路由跳转过程中的一些钩子函 ...

最新文章

  1. 基于颜色特征的图像匹配MATLAB,基于颜色特征的图像检索系统 这是个MATLAB程序 - 下载 - 搜珍网...
  2. 这款网络排查工具,堪称神器!
  3. 如何对 string 进行Base64编码,解码?
  4. python图片重命名 工具_python - 请问django如何给上传的图片重命名
  5. Android中使用软引用和弱引用避免OOM的方法
  6. 新闻资讯java开发_新闻资讯app开发的功能与意义
  7. 终于看到这么贱的星座分析了
  8. 如何在 Serverless K8s 集群中低成本运行 Spark 数据计算?
  9. OpenCV-Laplacian边缘检测
  10. 探究JVM——运行时数据区
  11. ubuntu下tftp服务器搭建
  12. 联想y7000p电池固件下载_刚读大学要用电脑,联想系列这3款笔记本学生党绝对喜欢...
  13. 智慧运维:基于 BIM 技术的可视化管理系统
  14. 【图像处理算法】直方图均衡化
  15. 论html5十大优点
  16. 企业运维实战--MFS分布式文件系统
  17. 安卓开发用什么语言?Jetpack-MVVM-高频提问和解答,Android校招面试指南
  18. SLAM闲谈(一)--词袋模型
  19. 2021-2022学年广州市白云区八年级第一学期期中统考英语试题
  20. Kafka实时流数据经Storm至Hdfs

热门文章

  1. html中浏览不留痕迹,彻底删除记录,你需要这样操作不留痕迹
  2. Java工作小组组名,小组合作组名组训组号
  3. 华为存储iscsi配置_安装与配置Windows平台iSCSI存储环境
  4. 飞絮读诗联3:从“碧鹦鹉对红蔷薇”到对联
  5. Word基础(五)给文本添加无序列表
  6. mysql mongodb 集群_MongoDB 集群
  7. Home Assistant-开源智能家居系统
  8. django 登录注册注销
  9. 低配电脑如何运行lumion高速渲染
  10. 实战演练 | 在 Navicat 16 中生成测试数据