前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Vue之Router(一)

Vue之Router(一)

作者头像
yuanshuai
发布2022-08-22 16:53:42
9120
发布2022-08-22 16:53:42
举报
文章被收录于专栏:一只程序原

一、前景知识

(一)、基本知识

路由、转送、路由表

路由:我们仨都算是负责运输行业的,但是我只是负责运输线路的确定 路由表:为了避免“转送”送错货物到码头,我就负责指定运输的码头 转送: 我负责具体的货物运输,将货物运输到指定的码头。要是没有“路由表”大哥的帮忙,我肯定一天要在十多个码头来来回回的瞎折腾呢。

① 路由:决定数据包从来源到目的地的路径② 路由表:本质是映射表,决定了数据包的指向③ 转送:将输入端的数据包传送到合适的输出端

(二)、前后端未分离阶段

1.后端渲染

后端渲染:我是高级绘画师,常常做着默默无闻的工作。平常只要是 “服务器”大哥给我的 “URL”设计方案,我都能用我精湛的jsp技术将它们绘画出来。

后端渲染涉及到三个东西:浏览器 + 服务器 + jsp ① 浏览器:当客户端点击某个页面时,浏览器就会将该页面的URL传递给服务器 **② 服务器:**服务在接受到了浏览器传送过来的URL后,对URL进行解析,通过jsp技术渲染相应的内容 ③ jsp:全称 Java Server Page,是将服务器解析后传送过来的URL进行渲染,比如添加HTML、CSS、Java等,最后将渲染好的页面再传回给浏览器。

后端渲染,用一句话来说就是:网页已经在jsp渲染好了再传送给浏览器。

2.后端路由

后端路由主要负责URL和jsp页面的映射关系,但是使用后端路由会有以下的缺点: ① 整个页面的模块都是由后端人员编写和维护的; ② 如果前端人员想要开发页面,就要会PHP和Java语言; ③ 将HTML代码和逻辑数据代码整合在了一起,不易于后期维护。

(三)、前后端分离阶段

1.基本原理

在这个阶段,涉及到三个重要的人物:浏览器、静态资源服务器、API接口服务器

  *浏览器:接到用户给我的URL订单,首先得向“静态资源服务器”请求该订单所需要的材料,然后有些材料要经过特殊处理的,我又得交给“API接口服务器”帮我加好工后再给回我,最后才能完成客户的订单。

① 浏览器:在接受到某个页面的URL时,首先会向静态资源服务器发送请求,静态服务器就会返回该页面相关的html+css+js;然后当浏览器解析js代码时,就通过Ajax向API服务器请求相应的数据;最后通过js 渲染到浏览器中。 **② 静态资源服务器:**当浏览器传送URL时,返回该页面相关的html+css+js。并且在静态资源服务器中,存放多套的html+css+js,每一个URL都有对应的一套html+css+js。 ③ API服务器:向浏览器发送解析所需要的数据

而在这个阶段,涉及到一个概念:前端渲染   前端渲染指的是浏览器显示的网页中的大部分内容,都是由前端写的js代码在浏览器中执行,最后显然出来的网页。 总结起来就是:网页的渲染是在浏览器中渲染的

2.特点

① 后端提供数据,前端通过Ajax获取数据,并且通过JavaScript将数据渲染到页面中; ② 前后端责任清晰,后端专注于数据上,前端专注于交互和可视化上

(四)、SPA:单页面富应用阶段

1.基本原理

  SPA,全称:Simple Page Application,译为单页面富应用。使用该模式开发出来的项目,最终只有一个index.html页面,如果涉及到多个页面时,需要前端路由的处理,下面讲解它们之间的原理:   浏览器:我现在可轻松啦,当用户向我提交URL订单的时候,我只需要向“静态资源服务器”请求原材料,而且是一下子就把所有的材料都搬运回来。 静态资源服务器:为了提高效率,我也不像以前那么傻,为每一个URL订单开一个工厂来专门生产材料,而是直接用一个工厂生产所有的材料。

① 静态资源服务器:保存html+css+js,并且html仅有一个index.html **② 浏览器:当接收某个页面的URL时,向静态资源服务器其请求一整套的html+css+js。下载一整套的资源最初仅仅渲染index.html,**而其余的页面在和用户有交互时才渲染。比如用户点击“我的”,就从一整套的html+css+js中抽取和“我的”页面相关的内容交给浏览器渲染出来。

而这个阶段的核心是:前端路由   前端路由是指当url发生改变时,就从一整套的html+css+js抽取出和当前url先关的内容,从而实现每个子url和子页面的一一对应关系。 总结起来就是:你要什么就给什么,不给多余的。

2.特点

在前后端分离的基础上增加了前端路由

要明白以下几点: 1.什么是前后端分离:前端负责美丽,后端负责干活 2.后端渲染:在jsp中已经渲染好了整夜页面 3.后端路由:将ur和jsp页面对应 4.前端渲染:在浏览器中渲染 5.前端路由:要什么给什么,而且绝不多给

二、路由安装和配置

(一)、如何实现修改URL而不刷新页面?

1.前因后果

  当页面的URL发生改变时,就会向服务器发送请求,请求该页面相应的内容,然后页面就会刷新。但是现在要做的就是当URL发生改变的时候,页面并不会进行刷新,可以通过下面三种方法:

2.方法

① 修改URL的hash 在控制台中输入命令: location.hash="xxx"   如果页面的URL发生改变,就会向服务器发送请求,请求的资源我们可以在Network查看。所以演示的步骤如下:在控制台输入 location.hash="aaa" -->观察浏览器的地址栏是否改变 --> 查看Network 是否有新资源。

地址栏由原来的 http://localhost:8080/ --> 变成 http://localhost/#/aaa 说明页面的URL已经发生了改变。

发现该页面并没有向服务器发送新的请求。说明这个方法是可行的O(∩_∩)O

② html5 的pushState

这是第二种修改URL而不刷新页面的方法,用法如下: history.pushState(,'xxx','URL') 。第一个参数是对象,第二个参数是title,第三个参数是URL

history.pushState指令的原理和栈结构相似。先进后出,当在控制台输入多个history.pushState指令时,URL只会显示最后一条指令的URL。

③ html5 的replaceState 同样的,和pushState工作的基本原理相似,但是也有不同:   pushState是一个类似栈的结构,会保存历史记录,所以可以返回上一次访问过的页面;   而replaceState 是直接用当前的URL替代了上一个URL,所以不能够返回上一次访问过的页面。。

(二)、路由安装和配置

  路由的基本知识小编已经在上一篇提及过了,这里呢主要为大家分享如何安装和配置路由

1.安装路由

  有两种方式,一是通过命令 npm install vue-router --save安装,二是在创建项目的时候就选择安装路由

当安装完成后,会在src文件夹下默认创建 router 文件夹,router文件夹下又会自动创建 index.js文件。

2.使用路由的步骤

  这里主要分成四步:① 导入路由插件 ② 使用路由插件 ③创建路由对象 ④使用路由对象 ① 导入路由插件   在通过npm安装好路由之后,如果想真正的使用,首先肯定是导入路由啦。在router文件夹下的index.js文件写入下面的代码:

代码语言:javascript
复制
import VueRouter from 'vue-router'

② 使用路由插件   导入好的路由并不能直接使用,必须通过**Vue.use()**才可以使用。

代码语言:javascript
复制
Vue.use(VueRouter)

③ 创建路由对象   和创建Vue实例一样的创建方法,值得注意的是这里的routes属性负责了每一个URL和页面的映射关系o

代码语言:javascript
复制
const router = new VueRouter({
    // 负责URL和页面的映射关系
    routes:[
        
        
    ]
})

④ 使用路由对象   如果在别的页面使用路由,肯定得先把路由导出,别人才能调用。

代码语言:javascript
复制
//首先得在index.js文件导出路由
export  default router
代码语言:javascript
复制
//然后在main.js文件使用路由
import router from './router'
new Vue({
  el: '#app',
  router,
  render: h => h(App)
})

关于这里有必要解释一下,为什么导入路由的路径是 ./router 而不是 ./router/index.js 。因为在执行的时候,会默认先执行index的文件,所以写不写index的效果是一样的。

三、路由映射配置

(一)、编写路由映射关系

1.创建路由组件

因为映射关系是映射页面和URL的关系,所以我们得先准备好页面。 创建 home.vue 和 about.vue文件,然后在该文件中书写相关的内容

代码语言:javascript
复制
//about.vue文件内容
<template>
    <div>
        <h1>关于</h1>
        <span>在这里你可以问到任何你想问的问题</span>
    </div>
</template>

<script>
</script>

<style>
    h1{
        color: aquamarine;
    }
</style>


//home.vue文件内容
<template>
    <div>
        <h1>首页</h1>
        <span>我是首页</span>
    </div>
</template>

<script>
</script>

<style>
    h1{
        color: red;
    }
</style>
2.配置路由映射关系

  routes主要放两个东西:路径 path + 组件 component。每一个映射关系就是一个对象,所以我们可以这样写:

代码语言:javascript
复制
//1.导入
import VueRouter from 'vue-router'
import Home from '../components/home.vue'
import About from '../components/about.vue'
Vue.use(VueRouter)

//2.创建路由对象
const router = new VueRouter({
    // 负责URL和页面的映射关系
    routes:[
        {
            path:'/home',
            component:Home
        },
        {
            path:'/about',
            component:About
        }
        
    ]
})

//3.导出路由
export  default router

当页面的地址中有 “/home ”就显示home相关的页面;当页面的地址中有 “/about ”就显示about相关的页面.

3.使用路由

​ 页面和URL的映射关系已经建立好了,但是得要有东西来触发它们真正起作用,所以就涉及到另外两个重要的标签: router-link 和router-view **① router-link:**是vue-router 中已经注册过多的组件,其功能类似于a标签,点击到文字就跳转到相应的页面② router-view:它的作用就是决定页面的显示。 比如:

代码语言:javascript
复制
<template>
    <div>
        <router-link to="/home">首页</router-link>
        <router-link to="/about">关于</router-link>
        <router-view></router-view>
    </div>  
</template>

在App.vue文件中写入上面的代码,结果如下图所示:

四、路由跳转

(一)、路由的默认路径

1.产生原因

  当我们进入一个网页的时候,首先引入眼帘的肯定是首页对不对。所以我们要将首页作为我们的默认路径

2.用法

其实很简单,在routes的映射关系里使用redirect。   redirect又叫重定向,意思是当path为空的时候,就跳转到redirect指定的路径。 比如:

代码语言:javascript
复制
const router = new VueRouter({
    // 负责URL和页面的映射关系
    routes:[
    //路由的默认路径
        {
            path:"",
            redirect:'/home'
        },
        {
            path:'/home',
            component:Home
        },
        {
            path:'/about',
            component:About
        }
        
    ]
})

当路径为空的时候,我们就跳转到‘/home’路径下,然后根据映射关系,跳转到/home路径下就显示首页的内容。

3.改进

  但是大家有没有发现,我们的URL地址多了个 “#”【因为是通过hash值修改的URL】,然而我们并不希望有这个多余的“#”,怎么办呢? 很简单,在创建router对象的时候添加多一个属性: mode:history

代码语言:javascript
复制
const router = new VueRouter({
    // 负责URL和页面的映射关系
    routes:[
        {
            path:"",
            redirect:'/home'
        },
        {
            path:'/home',
            component:Home
        },
        {
            path:'/about',
            component:About
        }
        
    ],
    mode:'history'
})

五、路由跳转的方式

一、router-link补充

四个关键字:tag、to、replace、activeClass。 ① tag:指定 router-link 被渲染成什么组件。   router-link 默认被渲染成 a标签,如果你想要渲染成别的标签,添加 tag 属性即可,具体用法如下:

代码语言:javascript
复制
<router-link to="/home" tag="button">首页</router-link>
<router-link to="/about" tag="button">关于</router-link>

 可以看到,通过 tag="button" 的设置,就将router-link 以按钮的形式显示出来了。 **② to :指定跳转的路径。**用法如下:

代码语言:javascript
复制
<router-link to="/home">首页</router-link>
<router-link to="/about">关于</router-link>

当用户点击 “首页” 就会跳转到 “/home” 路径下的文件,以此类推。

③ replace:不会留下历史记录,即点击后退键不会返回到上一个页面中。   router-link 默认是采用 pushState 的方式保留历史记录,如果在某些特殊的情况下不允许用户点来点去就乐意添加该属性。用法如下:

代码语言:javascript
复制
<router-link to="/home" replace>首页</router-link>
<router-link to="/about" replace>关于</router-link>

当用户子在“首页” 和 “关于” 两个页面来回切换时,就不可以返回上一个访问过的页面。)╮ ④ activeClass:激活状态。   意思是当 router-link 对应的路由匹配成功时,会自动给当前元素设置一个叫router-link-actice的class,设置active-class 可以修改默认的名称。用法如下: 4.1 单一书写 这种写法是直接嵌套在标签内部,比如:

代码语言:javascript
复制
<router-link to="/home" tag="button" replace active-class="warp">首页</router-link>
<router-link to="/about" tag="button" replace active-class="warp">关于</router-link>

这种写法并非长久之计,因为一旦页面数量很多的时候,就招架不住了,所以强烈推荐下面写法。 4.2 批量书写 通过在router 对象添加属性 linkActiveClass 。比如:

代码语言:javascript
复制
const router = new VueRouter({
// 负责URL和页面的映射关系
    routes:[
    linkActiveClass:"warp"
})

二、代码跳转路由

  在上面呢,我们是通过 router-link 标签来实现路由跳转的,那如果我不想通过这种方式来跳转路由,是否还有其他的方式呢?答案是:有的。下面就为大家分享路由跳转的进阶版本--代码跳转

1.基本思路

  代码跳转的思路很简单,通过添加事件,然后在对事件处理的methods方法中添加属性:this.$router 即可,具体见下面代码:

2.使用流程

① 绑定事件   绑定事件的对象是需要路由跳转的地方,比如点击 “首页” 就跳转到 “/home”页面

代码语言:javascript
复制
<button @click="homeClick">首页</button>
<button @click="aboutClick">关于</button>

② 添加 this.$router属性 在导出路由对象的地方添加属性如下:

代码语言:javascript
复制
<script>
export default {
  name: 'App',
  methods:{
      homeClick(){
          this.$router.push('./home');
      },
      aboutClick(){
          this.$router.push('./about');
      }
  }
}
</script>

$router是vue-router本身自带的属性。代码跳转的方式和使用 router-link 跳转的方式其实差不多,都可以一一对应起来。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021.11.30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、前景知识
    • (一)、基本知识
      • (二)、前后端未分离阶段
        • (三)、前后端分离阶段
          • (四)、SPA:单页面富应用阶段
          • 二、路由安装和配置
            • (一)、如何实现修改URL而不刷新页面?
              • 1.前因后果
              • 2.方法
            • (二)、路由安装和配置
            • 三、路由映射配置
              • (一)、编写路由映射关系
              • 四、路由跳转
                • (一)、路由的默认路径
                • 五、路由跳转的方式
                • 一、router-link补充
                • 二、代码跳转路由
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档