vue-router之前端路由的学习总结
什么是路由
- 路由就是通过互联网把信息从源地址传输到目的地的活动 --维基百科
 - 举例路由器:
 
- 路由器提供了两种机制:路由和转送
- 路由是决定数据包从来源到目的地的路径
 - 转送将输入端的数据转移到合适的输出端
 
 - 路由里有一个非常重要的概念叫路由表
- 本质上就是一个映射表,决定了数据包的指向
 
 
开发中路由的几个阶段
- 后端路由阶段
 
- URL发送到服务器,服务区进行正则匹配,经过处理,生成HTML或者数据(html,css,js),返回给前端,完成一个IO操作(input:输入,output:输出)
 
- 前后端分离阶段
 
- 随着ajax出现,有了前后端分离,有点,后端专注于数据,前端专注将数据渲染到页面上,而且移动端出现后,仍然可以使用之前的后端API数据接口,只是进行不同的样式的渲染
 - URL向静态服务器请求页面数据(多个页面),根据不同的URL请求并回应不同的页面
 
- 单页面父应用阶段
 
- SPA最主要的特点就是在前后端分离的基础上加了一层前端路由,也就是前端来维护一套路由规则
 - 改变URL,但是页面不进行整体的刷新
 
路由的规则
- URL构成 :
 
- 协议://主机:端口/路径?查询(中文)
 - scheme://host:port/path?query#fragment
 
- URL的hash
 
- URL的hash也就是'锚点',本质上是改变window.laction的href属性
 
- HTML5的history模式
 
- history接口是HTML5新增的,它有五种模式改变你URL而不断刷新页面.
 - history.pushState({},'','/foo')
 - history.replaceState({},'','/foo/bar')
 - history.go(-1)/histroy(1)
 
认识vue-router
- 目前前端三大流行的框架都有自己的路由实现
 
- Angular的ngRouter,React的ReactRouter ,Vue的vue-router
 
- vue-router是Vue.js官方的路由插件,它和vue.js深度集成,适合用于构建单页项目应用
 - vue-router是基于路由和组件的
 
- 路由用于设定访问路径,将路径和组件映射起来
 - 在vue-router的单页面应用中,页面的路径的改变就是组件的切换
 
安装和使用Vue-router
npm install vue-router --save(在项目运行时依然需要)- 在工程模块中使用它(因为时插件,通过Vue.use()来安装路由功能)
 
- 第一步:导入路由对象(
import Vue from 'vue'+import VueRouter from 'vue-router'),并且调用Vue.use(VueRouter) - 第二步:创建路由实例(index.js),并且传入路由映射配置
 - 第三部: 在Vue实例中挂载创建的路由实例
 
- 使用vue-router的步骤
 
- 第一步:创建路由组件
 - 第二步:配置路由映射:组件和路径映射关系
 - 第三部:使用路由:通过
<router-link></router-link>和<router-view></router-view> 
使用时细节
- 路由的默认路径
 
- 如何可以让路径默认跳到首页,并且让
<router-view>渲染首页的内容 多配置一个映射即可
{
path:'/',
redirect:'/home'
}
redirect时重新定向
- router-link补充
 
- 使用router-link的to的时候,里面一定要用'/'开头
 - tag属性,让其渲染成a之外的元素,
<router-link to='/' tag='li'> - replace属性:replace不会留下history记录, 所以指定replace的情况下, 后退键返回不能返回到上一个页面中
 - active-class:当对应的路由匹配成功时, 会自动给当前元素设置一个router-link-active的class, 设置active-class可以修改默认的名称
 
- HTML5的hist模式
 
- 如果希望使用HTML5的history模式, 非常简单, 进行如下配置即可
 - 在router实例中使用:mode:'history'
 
- 路由通过代码跳转
 
App的vue中:
<button @linkToHome>首页</button> methods:{
linkToHome(){
this.$router.push('./home')
}
}
- 动态路由
 
{
path:'user/:id',
component:User
}
<div>
<h2> {{ $route.params.id}} </h2>
</div>
<router-link to='/user/123'>用户<router-link>
路由懒加载
- 路由懒加载的主要作用就是将路由对应的组件打包成一个个的js代码块,当这个路由被访问到的时候在加载对应的组件
 const routes=[
path:'/home'
component:()=>import('../components/About')
{
}
]
方式一: 结合Vue的异步组件和Webpack的代码分析.
const Home = resolve => { require.ensure(['../components/Home.vue'], () => { resolve(require('../components/Home.vue')) })}; 方式二: AMD写法
const About = resolve => require(['../components/About.vue'], resolve); 方式三: 在ES6中, 我们可以有更加简单的写法来组织Vue异步组件和Webpack的代码分割.
const Home = () => import('../components/Home.vue')
路由嵌套
- 比如在home页面中, 我们希望通过
/home/news和/home/message访问一些内容. - 实现嵌套的两个步骤:
 
1. 创建对应的子组件,并且在路由映射中配置对应的子路由 {
path: '/home',
component: Home,
children:[
{
path:'news',
component:HomeNews
}
]
}
2. 在组件内部使用`<router-view>`标签
传递参数(params,query)
- params类型
 
- 配置路由:/router
 - 传递方式:在path后面跟上对应的值
 - 传递后形成的路径:/routr/123,/router/abc
 
- query的类型
 
- 配置路由格式:/router,也就是普通配置
 - 传递的方式:对象中使用query的key作为传递方式
 - 传递后形成的路径:/router?id=123,/router?id=abc
 传递方式一:
<router-link
:to="{
path:'/profile/'+123, //params
query:{name:'why',age:18} //query
}"
></router-link> 传递方式二:
methods:{
toProfile(){
this.$router.push({
path:'/profile/'+123, //params
query:{name:'why',age:18}
})
},
}
获取参数
- 获取参数通过$router对象获取
 
- 在使用了vue-router的应用中,路由对象会被注入到每个组件中,赋值为this.$route,并且当路由切换时,路由对象会被更新
 
- $router和$route的区别
 
- $router为VueRouter的实例,想要导航到不同的URL,则使用$router.push方法
 - $route为当前router跳转对象里面可以获取name,path,query,parmas
 
导航守卫
- 什么是导航守卫?
 
- vue-router提供的导航守卫主要用来监听路由的进入和离开
 - vue-router提供了beforeEach和afterEach的钩子函数,它们会在路由即将改变前和改变后触发
 
- 使用导航守卫beforeEach来完成标题的修改
 
- 首先我们可以在钩子当中定义一些标题,可以利用meta来定义,在路由组件path和component下定义 
meta{ title:'关于'} - 其次,利用导航守卫,修改我们的标题
 // to:即将进入目标的路由对象,from当前导航的即将要离开的对象,next调用了该方法,才能进入下一个钩子
router.beforeEach(to,from,next) =>{
window.document.title = to.meta.title
next()
}
- 导航守卫补充
 
- 1.如果是后置钩子(after),不需要主动调用next()函数
 - 2.上面使用的是全局守卫,其实还有路由独享的守卫,组件内的守卫
 - 3.其它可以去官方进行学习
 
keep-alive遇见vue-router
- keep-alive 是 Vue 内置的一个组件,可以使被包含的组件保留状态,或避免重新渲染。
 
- 它们有两个非常重要的属性:
 - include - 字符串或正则表达,只有匹配的组件会被缓存
 - exclude - 字符串或正则表达式,任何匹配的组件都不会被缓存
 
- router-view 也是一个组件,如果直接被包在 keep-alive 里面,所有路径匹配到的视图组件都会被缓存:
<keep-alive exclude="Profile">
<router-view></router-view>
</keep-alive>
 
vue-router之前端路由的学习总结的更多相关文章
- vue.js利用vue.router创建前端路由
		
node.js方式: 利用node.js安装vue-router模块 cnpm install vue-router 安装完成后我们引入这个模板! 下载vue-router利用script引入方式: ...
 - [Vue 牛刀小试]:第十二章 - 使用 Vue Router 实现 Vue 中的前端路由控制
		
一.前言 前端路由是什么?如果你之前从事的是后端的工作,或者虽然有接触前端,但是并没有使用到单页面应用的话,这个概念对你来说还是会很陌生的.那么,为什么会在单页面应用中存在这么一个概念,以及,前端路由 ...
 - Vue(三)之前端路由
		
01-前端路由 1.前端路由的实现原理 vue+vue-router 主要来做单页面应用(Single Page Application) 为什么我们要做单页面应用? (1)传统的开发方式 url改变 ...
 - 快速搞定用Vue+Webpack搭建前端项目(学习好久了,该写点东西了......)
		
现在开始安装环境 一.安装node.js 首先要安装node.js,去nodejs官网下载即可,地址:http://nodejs.cn/中文网. 安装完成后,打开终端(windows键+R)搜索cmd ...
 - Vue Router路由守卫妙用:异步获取数据成功后再进行路由跳转并传递数据,失败则不进行跳转
		
问题引入 试想这样一个业务场景: 在用户输入数据,点击提交按钮后,这时发起了ajax请求,如果请求成功, 则跳转到详情页面并展示详情数据,失败则不跳转到详情页面,只是在当前页面给出错误消息. 难点所在 ...
 - [Vue 牛刀小试]:第十四章 - 编程式导航与实现组件与 Vue Router 之间的解耦
		
一.前言 在上一章的学习中,通过举例说明,我们了解了 Vue Router 中命名路由.命名视图的使用方法,以及如何通过 query 查询参数传参,或者是采用 param 传参的方式实现路由间的参数传 ...
 - 浅析使用vue-router实现前端路由的两种方式
		
关于vue-router 由于最近的项目中一直在使用vue,所以前端路由方案也是使用的官方路由vue-router,之前在angularJS项目中也是用过UI-router,感觉大同小异,不过很显然v ...
 - Vue躬行记(8)——Vue Router
		
虽然Vue.js未提供路由功能,但是官方推出了Vue Router(即vue-router库),以插件的形式支持.它与Vue.js深度集成,可快速的创建单页应用(Single Page Applica ...
 - 前端MVC Vue2学习总结(八)——Vue Router路由、Vuex状态管理、Element-UI
		
一.Vue Router路由 二.Vuex状态管理 三.Element-UI Element-UI是饿了么前端团队推出的一款基于Vue.js 2.0 的桌面端UI框架,手机端有对应框架是 Mint U ...
 
随机推荐
- centos7—计划任务(at、cron)
			
centos7—计划任务(at.cron) 2018-08-08 14:33:17 coisini_覔 阅读数 3751更多 分类专栏: Linux基础 crond/at 版权声明:本文为博主原创 ...
 - 整理了2019年上千道Java面试题,近500页文档,用了1个月时间!
			
spring 面试题 1.一般问题 1.1.不同版本的 spring Framework 有哪些主要功能? 1.2.什么是 spring Framework? 1.3.列举 spring Framew ...
 - java8-Stream流API
			
一回顾与说明 经过前面发布的三章java8的博客,你就懂得了我们为什么要用Lamda表达式,Lamda表达式的原理与函数式接口的关系,从Lamda表达式到方法引用和构造引用. 想要学Stream流你必 ...
 - go 利用chan的阻塞机制,实现协程的开始、阻塞、返回控制器
			
一.使用场景 大背景是从kafka 中读取oplog进行增量处理,但是当我想发一条命令将这个增量过程阻塞,然后开始进行一次全量同步之后,在开始继续增量. 所以需要对多个协程进行控制. 二.使用知识 1 ...
 - d3.js 入门指南 - 仪表盘
			
D3的全称是Data-Driven Documents(数据驱动的文档),是一个用来做数据可视化的JavaScript函数库,而JavaScript文件的后缀通常为.js,所以D3被称为D3.js. ...
 - .NET Core Razor Pages中ajax get和post的使用
			
ASP.NET Core Razor Pages Web项目大部分情况下使用继承与PageModel中的方法直接调用就可以(asp-page),但是有些时候需要使用ajax调用,更方便些.那么如何使用 ...
 - SAP QM 检验批里样品数量的确定
			
SAP QM 检验批里样品数量的确定 如下的检验批890000045939, 样品数量是50 PC. 检查该检验批对应的检验计划, 这些检验特性都有自己的取样策略,相关的取样数量,体现在结果录入界面, ...
 - EVERSPIN非易失性存储器具吸引力嵌入式技术
			
相关研究指出,如果以嵌入式MRAM取代微控制器中的eFlash和SRAM,可节省高达90%的功耗:如果采用单一晶体管MRAM取代六个晶体管SRAM,则可实现更高的位元密度和更小的芯片尺寸,这些功率与面 ...
 - STM32基本GPIO操作:按键输入(扫描+外部中断)
			
(涉及专有名词较多,难免解释不到位,若有错误还请指出,谢谢!) 硬件连接图如下: 一.扫描 思路是在main函数中通过死循环来扫描端口电平状态检测,以此判断按键是否按下.实现较为简单. 1.初始化(注 ...
 - PCA主成分分析(最大投影方差)
			
PCA简介: 从n维数据中提取最能代表这组数据的m个向量,也就是对数据进行降维(n->m),提取特征. 目标: 找到一个向量\(\mu\),使n个点在其上的投影的方差最大(投影后的数据越不集中, ...