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

  • 相关阅读:
    使用日历控件的一些体会(downmoon)
    带附加条件的NewID()用法
    微软的招聘哲学——做微软人的五大核心素质(摘自《微软360度》)
    彻底禁用fckEditor的上传功能(含防止Type漏洞问题)
    Remote Access Connection Manager 服务因下列错误而停止解决办法
    GridView如何更新批量数据和单条记录?
    .net1.1与.net2.0在加载ascx文件的控件时有所不同(Downmoon)
    牛羊吃草问题求解(downmoon)
    c#操作ecxel的一些资源(downmoon搜集)
    安装sql2008 enterprise (English正式版)图解
  • 原文地址:https://www.cnblogs.com/weiyiming007/p/13705503.html
Copyright © 2011-2022 走看看