zoukankan      html  css  js  c++  java
  • 12-vue-router1

    一、认识路由

    1、什么是路由
    路由(routing)就是通过互联的网络把信息从源地址传输到目的地址的活动   — 维基百科


    路由器提供了两种机制, 路由和转发

    • 路由是决定数据包从来源到目的地的路径
    • 转发将输入端的数据转移到合适的输出端

    2、网站发展的几个阶段
    (1)后端路由阶段

    什么是后端路由

    早期的网站开发,整个 HTML 页面都是是由服务器来渲染的,服务器直接生产渲染好对应的 HTML 页面, 返回给客户端进行展示

    但是, 服务器如何处理一个网站的诸多页面呢?

    首先,一个页面会有自己对应的网址, 也就是 URL,客户端发生请求时,URL 会发送到服务器,服务器通过正则对该URL 进行匹配且最后交给

    Controller 进行处理,Controller 进行各种处理后,最终生成 HTML 或者数据,返回给前端,这就完成了一个IO操作,这种操作, 就是后端路由;


    端路由的优点

    当页面中需要请求不同的路径内容时,交给服务器来进行处理, 服务器渲染好整个页面,并且将页面返回给客户端,

    这种情况下渲染好的页面,不需要单独加载任何的 js 和 css,可以直接交给浏览器展示,这样也有利于 SEO 的优化


    后端路由的缺点

    • 整个页面的模块都要由后端人员来编写和维护,工作量太大
    • 前端开发人员如果要开发页面,需要通过 PHP 和 Java 等语言来编写页面代码,增加了额外的学习成本
    • HTML 代码和数据以及对应的逻辑混在一起,,不利于编写和维护

    (2)前端路由阶段

    前端路由的核心:改变URL,但是页面不进行整体的刷新


    前后端分离阶段

    随着 Ajax 的出现,有了前后端分离的开发模式:后端只提供 API 来返回数据,前端通过 Ajax 获取数据,并且可以通过 JavaScript 将数据渲染到页面中


    优点:

    • 前后端责任变得很清晰,后端专注于数据上, 前端专注于交互和可视化上
    • 当移动端(iOS/Android)出现后,后端不需要进行任何处理, 依然使用之前的一套API即可

    单页面富应用阶段

    单页面富应用,即单页Web应用(single page web application,SPA),就是只有一张 Web 页面的应用,是加载单个 HTML 页面并在用户与应用程序

    交互时动态更新该页面的 Web 应用程序;

    简单理解:就是在前后端分离的基础上加了一层前端路由


    SPA的特点

    • 速度:更好的用户体验,让用户在 web app 感受 native app 的速度和流畅
    • ·MVVM:经典 MVVM 开发模式,前后端各负其责
    • ·ajax:重前端,业务逻辑全部在本地操作,数据都需要通过AJAX同步、提交
    • ·路由:在 URL 中采用 # 号来作为当前视图的地址,改变 # 号后的参数,页面并不会重载


    SPA 缺点

    • 首屏渲染等待时长: 必须得加载完毕,才能渲染出首屏 ;
    • eo不友好:爬虫只能拿到一个 div,认为页面是空的,不利于 seo ;
    • 次加载耗时多:为实现单页Web应用功能及显示效果,需要在加载页面的时候将 JavaScript、CSS 统一加载,部分页面可以在需要的时候加载,

                所以必须对 JavaScript 及 CSS 代码进行合并压缩处理,如果使用第三方库,建议使用一些大公司的 CDN,因此带宽的消耗是必然的;


    SPA 优点

    • 良好的交互体验 :用户不需要重新刷新页面,获取数据也是通过 Ajax 异步获取,页面显示流畅 ;
    • 良好的前后端工作分离模式:单页 Web 应用可以和 RESTful 规约一起使用,通过 REST API 提供接口数据,并使用 Ajax 异步获取,这样有助于分离

                客户端和服务器端工作,更进一步,可以在客户端也可以分解为静态页面和页面交互两个部分 ;

    • 减轻服务器压力:服务器只用出数据就可以,不用管展示逻辑和页面合成,吞吐能力会提高几倍 ;
    • 用一套后端程序代码 :不用修改后端程序代码就可以同时用于 Web 界面、手机、平板等多种客户端;


    3、改变URL,页面不刷新

    (1)URL的hash

    URL 的 hash 也就是锚点(#),本质上是改变 window.location 的 href 属性,可以通过直接赋值 location.hash 来改变 href,但是页面不发生刷新;

    image


    (2)HTML5的history模式

    history 接口是 HTML5 新增的,它有五种模式改变 URL 而不刷新页面;


    history.pushState()

    image


    history.replaceState()

    history.forward()

    history.back()

    history.go()

    image

    history.back() 等价于 history.go(-1)

    history.forward() 则等价于 history.go(1)


    二、vue-router的基本使用

    目前前端流行的三大框架,都有自己的路由实现:

    • Angular:ngRouter
    • React:ReactRouter
    • Vue:vue-router


    vue-router 是 Vue.js 官方的路由插件,它和 vue.js 是深度集成的,适合用于构建单页面应用;

    vue-router 是基于路由和组件的,路由用于设定访问路径, 将路径和组件映射起来,在 vue-router 的单页面应用中, 页面路径的改变就是组件的切换;


    1、安装vue-router

    npm install vue-router --save


    在模块化工程中使用:

    因为 vue-router 是一个插件,所以可以通过 Vue.use() 来安装路由功能

    1. 导入路由对象,并且调用 Vue.use(VueRouter)
    2. 创建路由实例,并且传入路由映射配置
    3. 在 Vue 实例中挂载创建的路由实例


    2、使用vue-router

    (1)创建路由组件

    创建router实例

    image


    挂载到vue实例:
    image


    (2)配置路由映射: 组件和路径映射关系

    新建两个组件:

    image


    为组件配置路由映射关系:

    image


    使用路由: 通过<router-link><router-view>

    • <router-link>: 该标签是一个 vue-router 中已经内置的组件, 它默认会被渲染成一个 <a> 标签
    • <router-view>: 该标签会根据当前的路径,动态渲染出不同的组件

    image


    npm run dev  结果:

    image


    3、路由的默认值和修改history模式

    (1)路由默认值

    默认情况下, 进入网站的首页,我们希望 <router-view> 渲染首页的内容,但是在上面的实现中,默认没有显示首页组件,必须让用户点击才可以;


    如何可以让路径默认跳到到首页,并且<router-view>渲染首页组件呢?

    只需要在index.js中多配置一个映射就可以了:

    image

    这样,打开页面时,就会默认显示首页的内容了;


    (2)history模式

    前面说过改变路径的方式有两种:

    • URL 的 hash
    • HTML5 的 history


    默认情况下,Vue 路径的改变使用的是 URL 的 hash,这样显示出的页面的地址中有一个 # 号,不太美观:

    image


    可以使用 HTML5 的 history 模式来进行改变,进行如下配置即可:

    index.js

    image


    image



    4、router-link补充

    在前面的 <router-link> 中,我们只是使用了一个属性:to,用于指定跳转的路径


    <router-link> 还有一些其他属性:

    tag:tag 可以指定 <router-link> 之后渲染成什么组件,默认是渲染为 <a></a> 标签

    image


    image


    replace: replace 不会留下 history 记录,所以指定 replace 的情况下, 后退键返回不能返回到上一个页面中:

    image


    active-class: 当<router-link>对应的路由匹配成功时,会自动给当前元素设置一个 router-link-active 的class

    image


    设置 active-class 可以修改默认的名称:

    <router-link to="/home" tag="button" replace active-class="active">首页</router-link>


    image


    在进行高亮显示的导航菜单或者底部 tabbar 时,会使用到该类,比如想设置按钮点击时变为红色:

    image


    该 class 具体的名称也可以通过 router 实例的属性进行修改:

    image


    通常不会修改类的属性, 会直接使用默认的 router-link-active 即可;


    5、路由代码跳转

    有时候,页面的跳转可能需要执行对应的 JavaScript 代码,这个时候,就可以使用第二种跳转方式了

    比如,我们将代码修改如下:

    image

  • 相关阅读:
    BZOJ 3744 Gty的妹子序列
    BZOJ 3872 Ant colony
    BZOJ 1087 互不侵犯
    BZOJ 1070 修车
    BZOJ 2654 tree
    BZOJ 3243 向量内积
    1003 NOIP 模拟赛Day2 城市建设
    CF865D Buy Low Sell High
    CF444A DZY Loves Physics
    Luogu 4310 绝世好题
  • 原文地址:https://www.cnblogs.com/weiyiming007/p/13705503.html
Copyright © 2011-2022 走看看