Vue路由 —— vue-router

news2025/6/8 13:28:58

         在上一篇内容讲到关于单页面组件的内容,同时也附上补充讲了关于单页面(SPA)和多页面(MPA)之间的优缺点,在本篇目当中就要来讲这个路由(vue-router),通过路由来实现页面的局部切换或者更改:附上vue-router文档 —— 官方文档 | Vue Router

一级路由配置

        可以在 main.js 中引入路由模块,这些其实在创建项目的时候就已经帮我们处理好了的;

         在 /router/index.js 中来处理一下,来通过简单的一部分对这个路由文件进行了解:

         然后将项目运行起来时,会发现在浏览器请求url :http://localhost:8080/ 的时候会发现请求的url会时变成 http://localhost:8080/#/

        现在来将原先 /views/HomeView.vue 文件进行一个简化;

<!-- /views/HomeView.vue -->
<template>
  <div class="home">
    <img alt="Vue logo" src="../assets/logo.png">
  </div>
</template>

        通过路由信息的配置,将HomeView.vue组件引入,当path为Home时,即请求为http://localhost:8080/#/home 的时候就会对应的切换到HomeView.vue 组件,那么下面来进行一下尝试:

        在 /router/index.js 中配置:

        这样一来通过请求 http://localhost:8080/#/home 能否切换到HomeView组件呢?

        很显然是失败了,没有将HomeView组件中的内容显示出来,这是为什么呢?

        还记得在前面讲过这个项目的入口文件 main.js ,再拿出来看一看:

       即使在路由配置当中通过path: ' /home ',是可以匹配到HomeView组件,但关键是这个HomeView组件应该如何去显示,显示在哪里呢?

        如果要去显示就得到App.vue中去显示,App.vue同时要预留一个位置给HomeView组件来进行显示内容;通过 <router-view></router-view> 来进行预留位置;

<!-- App.vue -->
<template>
  <div id="app">
    <sHello></sHello>
    <button>按钮</button>
    <router-view></router-view>
  </div>
</template>

<script>
import hello from './components/SayHello.vue'
import Vue from 'vue'

Vue.component('sHello', hello)

export default {}
</script>
<style>
  button {
    background: yellow;
  }
</style>

        现在来再次测试运行来看一下HomeView组件是否成功了 —— 成功将HomeView组件显示出来了!


        下面就来用前面所讲到的内容来完成一个声明式导航!

声明式导航

        讲到声明式导航大家已经了解和清除了,那么不再赘述,先来看一下简单的效果:

        当路由进行变化时,对应的页面也将随即切换,当请求的url地址为 localhost:8080/#/home 时页面会切换到首页页面(HomeView),服务(ServerView)和关于(AboutView) 这个两个同理,那么下面先来编写这几个页面:

1)在 /views/ 目录下编写如下几个页面文件:

<!-- HomeView.vue -->
<template>
  <div class="home">
    这是首页页面
  </div>
</template>
<!--ServerView.vue-->
<template>
    <div class="server">
      这是服务页面
    </div>
</template>
<!--AboutView.vue-->
<template>
  <div class="about">
    这是关于页面
  </div>
</template>

2)在 /router/index.js 文件中配置路由信息:

import Vue from 'vue'
import VueRouter from 'vue-router'
// 引入组件
import Home from '../views/HomeView.vue'
import Server from '../views/ServerView.vue'
import About from '../views/AboutView.vue'

Vue.use(VueRouter)

const routes = [
  {
    path: '/'
  },
  {
    path: '/home',
    component: Home
  },
  {
    path: '/server',
    component: Server
  },
  {
    path: '/about',
    component: About
  }
]

const router = new VueRouter({
  routes
})

export default router

3)编写声明式导航组件

        创建 /components/TabBar.vue 文件作为导航组件文件,在 a标签 中通过 #/path路径 就可以进行跳转的切换,这里的预编译器选择是 "scss" ;

<template>
    <nav>
        <ul>
            <li><a href="#/home">首页</a></li>
            <li><a href="#/server">服务</a></li>
            <li><a href="#/about">关于</a></li>
        </ul>
    </nav>
</template>

<script>
export default {

}
</script>

<style lang="scss">
    nav{
        margin: 0 auto;
        padding: 0;
        border-bottom: 1px solid black;
    }
    ul{
        display: flex;
        li{
            flex:1;
            text-align: center;
            list-style: none;
            a{
                text-decoration: none;
            }
        }
    }
</style>

4)将声明式导航组件引入App.vue中,最后不要忘记在 App.vue 中预留一个显示的容器 <router-view></router-view> 来让其有显示的位置,否则不报错,也不会显示出来;

<!--App.vue-->
<template>
  <div id="app">
    <tabBar></tabBar>
    <router-view></router-view>
  </div>
</template>

<script>
import tabbar from './components/TabBar'
import Vue from 'vue'

Vue.component('tabBar', tabbar)

export default {

}
</script>
<style>
  button {
    background: yellow;
  }
</style>

5)项目测试运行:

  •  点击【首页】: 切换路由时对应的页面也会随即切换到这个首页页面;

  • 点击【服务】,点击【关于】:测试OK!


location.hash

        通过导航点击可以进行一个切换,对应的路经发生变化,window.onhashchange方法能够监听到锚点的改变该函数就会触发回调,在回调中获取到location.hash的值,这样一来就可以对导航文字进行效果处理,如高亮显示;——  [ #是锚点,#/路径 是hash(哈希) ]

        知道了这样一个原理后,我们不会这么来操作,因为Vue已经提供好了,通过 <router-link> 标签,下面来调整 TabBar.vue 中的代码段:

<!-- App.vue -->
<template>
    <nav>
        <ul>
            <router-link to="/home" tag="li">首页</router-link>
            <router-link to="/server" tag="li">服务</router-link>
            <router-link to="/about" tag="li">关于</router-link>
        </ul>
    </nav>
</template>

        进行测试运行查看一下:

        观察可以看到原先并没有设置它的类选择器进行样式显示,这样一来可以进行高亮效果的显示,只需要进行样式的添加即可:

<style lang="scss">
    .router-link-active{
        color:skyblue;
        font-weight: bold;
    }
    ...
</style>

        可以看到选择的这个导航已经有了高亮的文字显示了,那么如果需要避免冲突,可以自行的来设置这个类选择器的样式,给 <router-link> 标签中添加active-class属性;如下: 

<template>
    <nav>
        <ul>
            <router-link to="/home" tag="li" active-class="active-chosen">首页</router-link>
            <router-link to="/server" tag="li" active-class="active-chosen">服务</router-link>
            <router-link to="/about" tag="li" active-class="active-chosen">关于</router-link>
        </ul>
    </nav>
</template>
<script>
    export default {}
</script>
<style lang="scss">
    .active-chosen{
        color: skyblue;
        font-weight: bold;
    }
</style>


        也许读者已经发现了一个问题,当进入页面的时候不应该就是【首页】内容了吗?怎么还需要再点击一次首页才能看到【首页】呢?这就是下面要来讲到的 "重定向" !

重定向

        当进入页面的时候地址是 : http://localhost:8080/#/ ,那么现如今我们的首页地址则是 http://localhost:8080/#/home,则当进入页面时就定制重定向到首页的地址即可:

        在 /router/index.js 中添加路由配置信息:

...
const routes = [
  {
    path: '/',
    redirect: '/home'
  },
...

        通过 redirect 将路径 " / " 进行重定向到 " /home ",接下来的再运行测试项目的时候进入的页面就是首页了;

        以上就是本篇目的全部内容了,通过vue-router了解到了基础的路由信息、一级路由配置、声明式导航和在声明式导航中了解到了路由切换会触发location.hash执行以及路由的重定向问题,再次感谢大家的支持!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/334443.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LCR测试仪测量电子元件的4种方法

当今电子元件的设计追求高性能&#xff0c; 而同时又致力于减少尺寸、 功耗和成本。 有效而准确的元件性能描述、设计、评估和制造过程中的测试&#xff0c;对于元件用户和生产厂家是至关重要的。电感、电容、电阻是电子线路中使用广泛的电子器件&#xff0c;在进行电子设计的基…

【图像处理OpenCV(C++版)】——4.5 全局直方图均衡化

前言&#xff1a; &#x1f60a;&#x1f60a;&#x1f60a;欢迎来到本博客&#x1f60a;&#x1f60a;&#x1f60a; &#x1f31f;&#x1f31f;&#x1f31f; 本专栏主要结合OpenCV和C来实现一些基本的图像处理算法并详细解释各参数含义&#xff0c;适用于平时学习、工作快…

Vue中路由缓存及activated与deactivated的详解

目录前言一&#xff0c;路由缓存1.1 引子1.2 路由缓存的方法1.2.1 keep-alive1.2.2 keep-alive标签中的include属性1.2.3 include中多组件的配置二&#xff0c;activated与deactivated2.1 引子2.2 介绍activated与deactivated2.3 解决需求三&#xff0c;整体代码总结前言 在Vu…

【C++】C++11语法 ~ lambda 表达式

&#x1f308;欢迎来到C专栏~~ lambda 表达式 (꒪ꇴ꒪(꒪ꇴ꒪ )&#x1f423;,我是Scort目前状态&#xff1a;大三非科班啃C中&#x1f30d;博客主页&#xff1a;张小姐的猫~江湖背景快上车&#x1f698;&#xff0c;握好方向盘跟我有一起打天下嘞&#xff01;送给自己的一句鸡…

WPF常用UI库和图标库(MahApps、HandyControl、LiveCharts)

WPF常用UI库和图表库&#xff08;MahApps、HandyControl、LiveCharts&#xff09; WPF有很多开源免费的UI库&#xff0c;本文主要介绍常见的MahApps、HandyControl两个UI库&#xff1b;在开发过程中经常会涉及到图表的开发&#xff0c;本文主要介绍LiveCharts开源图表库。 UI…

Dell Precision T7910 工作站做RAID

1&#xff1a;开机根据提示按Ctrl-C 2&#xff1a;进入下面界面直接按回车。Adapter是LSISAS3008IR的卡。 3&#xff1a;回车来到下面的界面&#xff0c;我们选择RAID Propertie回车。 4&#xff1a;回车来到选择RAID级别的界面。根据自己的硬盘数量和需求进行选择。 5&#xf…

云原生丨Prometheus+Grafana监控 OpenGauss 数据库

文章目录前言一、Prometheus的介绍及安装1、Prometheus 介绍2、Prometheus 安装二、Grafana的介绍及安装1.Grafana 介绍2、Grafana 安装三、安装探针1、安装Node Exporter探针2.安装opengauss_exporter探针四、 访问Prometheus与Grafana1、 访问Prometheus2、 访问 Grafana五、…

React 组件性能优化

React 组件性能优化1. 组件卸载前进行清理操作2. PureComponent3. shouldComponentUpdate4. React.memo5. 使用组件懒加载6. 使用 Fragment 避免额外标记7. 不要使用内联函数定义8. 在构造函数中进行函数this绑定9. 类组件中的箭头函数10. 避免使用内联样式属性11. 优化条件渲染…

记录复现一下第一次awd

前言 之前没打过awd&#xff0c;这次学长组织了一场awd娱乐赛&#xff0c;两个web一个pwn&#xff0c;还有一个黑盒&#xff0c;只会web&#xff0c;第一次啥也不会瞎打&#xff0c;被打烂了&#xff0c;不会写脚本&#xff0c;手交flag的感觉真“不错”&#xff0c;感觉awd还…

NetIQ 高级认证框架

NetIQ 高级认证框架 NetIQ Advanced Authentication 提供无密码身份验证并提升安全访问&#xff0c;以满足这个可扩展的基于标准的身份验证框架的合规要求。 优点 1、灵活性不仅仅在于方法。平台和应用程序支持至关重要。将安全范围扩展到您的所有系统。 2、通过一套适合…

大数据技术之Hadoop(生产调优手册)

第1章 HDFS—核心参数 1.1 NameNode内存生产配置 1&#xff09;NameNode内存计算 每个文件块大概占用150byte&#xff0c;一台服务器128G内存为例&#xff0c;能存储多少文件块呢&#xff1f; 128 * 1024 * 1024 * 1024 / 150Byte ≈ 9.1亿 G MB KB Byte 2&#xff09;Hadoop…

百度笔记聚合怎么写

百度笔记聚合怎么写&#xff0c;#百度笔记聚合&#xff0c;#百度笔记优化&#xff0c;#百度笔记排名 小红书笔记收录大揭秘什么是笔记被收录&#xff1f; 你将你的笔记的标题复制&#xff0c;去搜索框搜索&#xff0c;如果能搜索到你的笔记出来&#xff0c;那就是被收录了。什…

C语言学习笔记-文件读写

C 文件读写 什么是文件&#xff1f; 文件是以计算机硬盘为载体存储在计算机上的信息集合。是数据源的一种&#xff0c;最主要的作用是保存数据。在程序设计中&#xff0c;我们可将文件分为两大类&#xff1a;程序文件和数据文件 &#xff08;1&#xff09;程序文件 包括源程…

浅谈前端安全和浏览器安全策略

前端安全 XSS(跨站脚本攻击) Cross-Site Scripting&#xff08;跨站脚本攻击&#xff09;简称 XSS&#xff0c;是一种代码注入攻击。攻击者通过在目标网站上注入恶意脚本&#xff0c;使之在用户的浏览器上运行。利用这些恶意脚本&#xff0c;攻击者可获取用户的敏感信息如 Co…

208:vue+openlayers 监听瓦片地图加载情况,200、403及其他状态码的处理示例

第208个 点击查看专栏目录 本示例的目的是介绍如何在vue+openlayer中加载XYZ地图,在load瓦片时,通过XMLHttpRequest进行捕捉,监听瓦片地址的loadend事件,针对不同的状态码,给出不同的处理结果。具体的方法参看源代码。 直接复制下面的 vue+openlayers源代码,操作2分钟即…

Conda安装到虚拟环境中的包在pycharm中不显示--pip下载的包都到了base环境中-Ubuntu20.04

问题 今天刚装了一个Ubuntu20.04系统&#xff0c;安装完Anaconda&#xff0c;虚拟环境的包也都下载好了&#xff0c;结果在pycharm中配置完解释器后&#xff0c;只有几个基础的包&#xff0c;切换到base环境后发现&#xff0c;这些包都被下载到了base环境中。 在网上查了各种…

《小猫猫大课堂》三轮5——动态内存管理(通讯录动态内存化)

宝子&#xff0c;你不点个赞吗&#xff1f;不评个论吗&#xff1f;不收个藏吗&#xff1f; 最后的最后&#xff0c;关注我&#xff0c;关注我&#xff0c;关注我&#xff0c;你会看到更多有趣的博客哦&#xff01;&#xff01;&#xff01; 喵喵喵&#xff0c;你对我真的很重…

seata分布式事务之AT模式实践代码

seata框架 AT模式&#xff1a; 先添加seata需要的数据库相关表&#xff0c;AT模式需要在每个业务所属库下建undo_log表&#xff0c;用来回滚的&#xff0c;出错seata就会从这个表生成反向sql回退数据 建表语句&#xff1a; SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS 0; -…

持续集成Jenkins (四)Jenkins+git+maven项目构建、自动化部署

GIT配置1.1 前言&#xff1a;需要安装 git 客户端.yum install git1.2 Jenkins 配置插件 Git 在仪表盘选择Manage Jenkins>>Plugin Manager>>进入如下页面&#xff0c;可以选择可选的插件&#xff0c;安装完成后的插件在installed里面可以看到&#xff0c;我这里已…

DataFrame与Spark SQL的由来

文章目录DataFrame与Spark SQL的由来RDD 之殇&#xff1a;优化空间受限DataFrame 横空出世幕后英雄&#xff1a;Spark SQL基于 DataFrame&#xff0c;Spark SQL 是如何进行优化的Catalyst 优化器TungstenDataFrame与Spark SQL的由来 Spark 已经有了 RDD 这个开发入口&#xff…