什么是路由

  1. 路由就是通过互联网把信息从源地址传输到目的地的活动 --维基百科
  2. 举例路由器:
  • 路由器提供了两种机制:路由和转送

    • 路由是决定数据包从来源目的地的路径
    • 转送将输入端的数据转移到合适的输出端
  • 路由里有一个非常重要的概念叫路由表
    • 本质上就是一个映射表,决定了数据包的指向

开发中路由的几个阶段

  1. 后端路由阶段
  • URL发送到服务器,服务区进行正则匹配,经过处理,生成HTML或者数据(html,css,js),返回给前端,完成一个IO操作(input:输入,output:输出)
  1. 前后端分离阶段
  • 随着ajax出现,有了前后端分离,有点,后端专注于数据,前端专注将数据渲染到页面上,而且移动端出现后,仍然可以使用之前的后端API数据接口,只是进行不同的样式的渲染
  • URL向静态服务器请求页面数据(多个页面),根据不同的URL请求并回应不同的页面
  1. 单页面父应用阶段
  • SPA最主要的特点就是在前后端分离的基础上加了一层前端路由,也就是前端来维护一套路由规则
  • 改变URL,但是页面不进行整体的刷新

路由的规则

    • URL构成 :
  • 协议://主机:端口/路径?查询(中文)
  • scheme://host:port/path?query#fragment
  1. URL的hash
  • URL的hash也就是'锚点',本质上是改变window.laction的href属性
  1. HTML5的history模式
  • history接口是HTML5新增的,它有五种模式改变你URL而不断刷新页面.
  • history.pushState({},'','/foo')
  • history.replaceState({},'','/foo/bar')
  • history.go(-1)/histroy(1)

认识vue-router

  1. 目前前端三大流行的框架都有自己的路由实现
  • Angular的ngRouter,React的ReactRouter ,Vue的vue-router
  1. vue-router是Vue.js官方的路由插件,它和vue.js深度集成,适合用于构建单页项目应用
  2. vue-router是基于路由和组件的
  • 路由用于设定访问路径,将路径和组件映射起来
  • 在vue-router的单页面应用中,页面的路径的改变就是组件的切换

安装和使用Vue-router

  1. npm install vue-router --save(在项目运行时依然需要)
  2. 在工程模块中使用它(因为时插件,通过Vue.use()来安装路由功能)
  • 第一步:导入路由对象(import Vue from 'vue' +import VueRouter from 'vue-router' ),并且调用Vue.use(VueRouter)
  • 第二步:创建路由实例(index.js),并且传入路由映射配置
  • 第三部: 在Vue实例中挂载创建的路由实例
  1. 使用vue-router的步骤
  • 第一步:创建路由组件
  • 第二步:配置路由映射:组件和路径映射关系
  • 第三部:使用路由:通过<router-link></router-link><router-view></router-view>

使用时细节

  1. 路由的默认路径
  • 如何可以让路径默认跳到首页,并且让<router-view>渲染首页的内容
    1. 多配置一个映射即可
    2. {
    3. path:'/',
    4. redirect:'/home'
    5. }
    6. redirect时重新定向
  1. router-link补充
  • 使用router-link的to的时候,里面一定要用'/'开头
  • tag属性,让其渲染成a之外的元素,<router-link to='/' tag='li'>
  • replace属性:replace不会留下history记录, 所以指定replace的情况下, 后退键返回不能返回到上一个页面中
  • active-class:当对应的路由匹配成功时, 会自动给当前元素设置一个router-link-active的class, 设置active-class可以修改默认的名称
  1. HTML5的hist模式
  • 如果希望使用HTML5的history模式, 非常简单, 进行如下配置即可
  • 在router实例中使用:mode:'history'
  1. 路由通过代码跳转
    1. Appvue中:
    2. <button @linkToHome>首页</button>
    3. methods:{
    4. linkToHome(){
    5. this.$router.push('./home')
    6. }
    7. }
  1. 动态路由
    1. {
    2. path:'user/:id',
    3. component:User
    4. }
    5. <div>
    6. <h2> {{ $route.params.id}} </h2>
    7. </div>
    8. <router-link to='/user/123'>用户<router-link>

路由懒加载

  1. 路由懒加载的主要作用就是将路由对应的组件打包成一个个的js代码块,当这个路由被访问到的时候在加载对应的组件
    1. const routes=[
    2. path:'/home'
    3. component:()=>import('../components/About')
    4. {
    5. }
    6. ]
    1. 方式一: 结合Vue的异步组件和Webpack的代码分析.
    2. const Home = resolve => { require.ensure(['../components/Home.vue'], () => { resolve(require('../components/Home.vue')) })};
    3. 方式二: AMD写法
    4. const About = resolve => require(['../components/About.vue'], resolve);
    5. 方式三: ES6中, 我们可以有更加简单的写法来组织Vue异步组件和Webpack的代码分割.
    6. const Home = () => import('../components/Home.vue')

路由嵌套

  1. 比如在home页面中, 我们希望通过/home/news和/home/message访问一些内容.
  2. 实现嵌套的两个步骤:
    1. 1. 创建对应的子组件,并且在路由映射中配置对应的子路由
    2. {
    3. path: '/home',
    4. component: Home,
    5. children:[
    6. {
    7. path:'news',
    8. component:HomeNews
    9. }
    10. ]
    11. }
    12. 2. 在组件内部使用`<router-view>`标签

传递参数(params,query)

  1. params类型
  • 配置路由:/router
  • 传递方式:在path后面跟上对应的值
  • 传递后形成的路径:/routr/123,/router/abc
  1. query的类型
  • 配置路由格式:/router,也就是普通配置
  • 传递的方式:对象中使用query的key作为传递方式
  • 传递后形成的路径:/router?id=123,/router?id=abc
    1. 传递方式一:
    2. <router-link
    3. :to="{
    4. path:'/profile/'+123, //params
    5. query:{name:'why',age:18} //query
    6. }"
    7. ></router-link>
    8. 传递方式二:
    9. methods:{
    10. toProfile(){
    11. this.$router.push({
    12. path:'/profile/'+123, //params
    13. query:{name:'why',age:18}
    14. })
    15. },
    16. }

获取参数

  1. 获取参数通过$router对象获取
  • 在使用了vue-router的应用中,路由对象会被注入到每个组件中,赋值为this.$route,并且当路由切换时,路由对象会被更新
  1. $router和$route的区别
  • $router为VueRouter的实例,想要导航到不同的URL,则使用$router.push方法
  • $route为当前router跳转对象里面可以获取name,path,query,parmas

导航守卫

  1. 什么是导航守卫?
  • vue-router提供的导航守卫主要用来监听路由的进入和离开
  • vue-router提供了beforeEach和afterEach的钩子函数,它们会在路由即将改变前和改变后触发
  1. 使用导航守卫beforeEach来完成标题的修改
  • 首先我们可以在钩子当中定义一些标题,可以利用meta来定义,在路由组件path和component下定义 meta{ title:'关于'}
  • 其次,利用导航守卫,修改我们的标题
    1. // to:即将进入目标的路由对象,from当前导航的即将要离开的对象,next调用了该方法,才能进入下一个钩子
    2. router.beforeEach(to,from,next) =>{
    3. window.document.title = to.meta.title
    4. next()
    5. }
  1. 导航守卫补充
  • 1.如果是后置钩子(after),不需要主动调用next()函数
  • 2.上面使用的是全局守卫,其实还有路由独享的守卫,组件内的守卫
  • 3.其它可以去官方进行学习

keep-alive遇见vue-router

  • keep-alive 是 Vue 内置的一个组件,可以使被包含的组件保留状态,或避免重新渲染。
  • 它们有两个非常重要的属性:
  • include - 字符串或正则表达,只有匹配的组件会被缓存
  • exclude - 字符串或正则表达式,任何匹配的组件都不会被缓存
  • router-view 也是一个组件,如果直接被包在 keep-alive 里面,所有路径匹配到的视图组件都会被缓存:

      1. <keep-alive exclude="Profile">
      2. <router-view></router-view>
      3. </keep-alive>

vue-router之前端路由的学习总结的更多相关文章

  1. vue.js利用vue.router创建前端路由

    node.js方式: 利用node.js安装vue-router模块 cnpm install vue-router 安装完成后我们引入这个模板! 下载vue-router利用script引入方式: ...

  2. [Vue 牛刀小试]:第十二章 - 使用 Vue Router 实现 Vue 中的前端路由控制

    一.前言 前端路由是什么?如果你之前从事的是后端的工作,或者虽然有接触前端,但是并没有使用到单页面应用的话,这个概念对你来说还是会很陌生的.那么,为什么会在单页面应用中存在这么一个概念,以及,前端路由 ...

  3. Vue(三)之前端路由

    01-前端路由 1.前端路由的实现原理 vue+vue-router 主要来做单页面应用(Single Page Application) 为什么我们要做单页面应用? (1)传统的开发方式 url改变 ...

  4. 快速搞定用Vue+Webpack搭建前端项目(学习好久了,该写点东西了......)

    现在开始安装环境 一.安装node.js 首先要安装node.js,去nodejs官网下载即可,地址:http://nodejs.cn/中文网. 安装完成后,打开终端(windows键+R)搜索cmd ...

  5. Vue Router路由守卫妙用:异步获取数据成功后再进行路由跳转并传递数据,失败则不进行跳转

    问题引入 试想这样一个业务场景: 在用户输入数据,点击提交按钮后,这时发起了ajax请求,如果请求成功, 则跳转到详情页面并展示详情数据,失败则不跳转到详情页面,只是在当前页面给出错误消息. 难点所在 ...

  6. [Vue 牛刀小试]:第十四章 - 编程式导航与实现组件与 Vue Router 之间的解耦

    一.前言 在上一章的学习中,通过举例说明,我们了解了 Vue Router 中命名路由.命名视图的使用方法,以及如何通过 query 查询参数传参,或者是采用 param 传参的方式实现路由间的参数传 ...

  7. 浅析使用vue-router实现前端路由的两种方式

    关于vue-router 由于最近的项目中一直在使用vue,所以前端路由方案也是使用的官方路由vue-router,之前在angularJS项目中也是用过UI-router,感觉大同小异,不过很显然v ...

  8. Vue躬行记(8)——Vue Router

    虽然Vue.js未提供路由功能,但是官方推出了Vue Router(即vue-router库),以插件的形式支持.它与Vue.js深度集成,可快速的创建单页应用(Single Page Applica ...

  9. 前端MVC Vue2学习总结(八)——Vue Router路由、Vuex状态管理、Element-UI

    一.Vue Router路由 二.Vuex状态管理 三.Element-UI Element-UI是饿了么前端团队推出的一款基于Vue.js 2.0 的桌面端UI框架,手机端有对应框架是 Mint U ...

随机推荐

  1. JS基础-BOM

    BOM BOM 是 browser object model 的缩写, 简称浏览器对象模型. 主要处理浏览器窗口和框架, 描述了与浏览器进行交互的方法和接口, 可以对浏览器窗口进行访问和操作, 譬如可 ...

  2. python学习-class对象

    # 面向对象 python,java,c## 面向过程 C # 类和对象# 类 类型类别.类别 物以类聚 一类事物# 班级.人类.动物类.车.学生类.老师类.手机.电脑# 统称 == 共同特性# 不具 ...

  3. 一个我经常用到的采集网页数据抓取网页获取数据的PHP函数类

    class get_c_str { var $str; var $start_str; var $end_str; var $start_pos; var $end_pos; var $c_str_l ...

  4. 《Java基础知识》流程控制

    流程控制分类: 一.顺序结构如果没有流程控制(即没有分支结构和循环结构),Java方法里面的语句是一个顺序执行流,从上到下依次执行每条语句. 二.分支结构1.if语句if语句使用布尔表达式或者布尔值作 ...

  5. 如何"快准狠"找到内存相关的问题

    为了迅速定位内存问题,通常会先运行几个覆盖面比较大的性能工具,比如 free.top.vmstat.pidstat 等. 具体的分析思路主要有这几步 先用 free 和 top,查看系统整体的内存使用 ...

  6. Caffe源码-Solver类

    Solver类简介 Net类中实现了网络的前向/反向计算和参数更新,而Solver类中则是对此进行进一步封装,包含可用于逐次训练网络的Step()函数,和用于求解网络的优化解的Solve()函数,同时 ...

  7. 02-EF Core笔记之保存数据

    EF Core通过ChangeTracker跟踪需要写入数据库的更改,当需要保存数据时,调用DbContext的SaveChanges方法完成保存. 基本的添加.更新.删除操作示例如下: using ...

  8. Swoole协程与传统fpm同步模式比较

    如果说数组是 PHP 的精髓,数组玩得不6的,根本不能算是会用PHP.那协程对于 Swoole 也是同理,不理解协程去用 Swoole,那就是在瞎用. 首先,Swoole 只能运行在命令行(Cli)模 ...

  9. SAP 基础知识

    SAP R/3系统的应用层由应用服务器及消息服务器(Message Server)组成. 应用服务器组件如下: 工作进程(Work Process) 调度机(Dispatcher) 网关服务器(Gat ...

  10. Android4.4 RIL短信接收流程分析

    最近有客户反馈Android接收不到短信,于是一头扎进RIL里面找原因.最后发现不是RIL的问题,而是BC72上报短信的格式不对,AT+CNMA=1无作用等几个小问题导致的.尽管问题不在RIL,但总算 ...