StarBlog博客Vue前端开发笔记:(2)页面路由
前言
Vue.js 使用虚拟 DOM 处理单页面,然后使用 Webpack 打包。通过上一篇文章的例子,读者也许已经发现,无论语法和写法如何不同,Vue.js 程序打包后都是一个单一的 HTML 文件,同时会引入一个标准的 JavaScript 文件。
Vue.js 中编写的所有代码都被 Webpack 自动打包成可以被浏览器解析的 HTML 和 JavaScript 代码,并且项目本身就只有一个页面。这意味着所有的用户对服务器发出进入页面的请求时,只会对服务器发出一次请求。
传统的 HTML 网页应用如果进行页面跳转,会根据网页地址(URL)来刷新页面,在网速极大提高的今天,这类跳转仍会不可避免地出现“白屏”现象,这显然不是 Vue.js 单页面应用想要的效果。而应用本身又需要 URL 来控制页面,在这种情况下,Vue.js 提供了 vue-router 来实现页面跳转。
本文内容
本文只是对 vue-router 有个初步的了解,后续的文章中会有更深入的使用
- vue-router 介绍
- 两种路由模式以及实现原理
- 编写三个简单的 vue 页面
- vue-router 的安装与配置
- 测试与验证
关于 vue-router
本项目使用的 vue-router 版本是 3.x,官方文档: https://v3.router.vuejs.org/zh/
Vue Router 是官方为 Vue.js 提供的路由管理器,它与 Vue.js 深度集成,让开发者能够轻松构建单页面应用。
通过 Vue Router,可以使用基于组件的方式定义路由,以实现灵活的页面结构和嵌套视图组织。
它的主要功能包括:
- 灵活的路由定义:支持嵌套路由、通过 URL 参数与查询字符串传递数据,以及使用通配符实现动态匹配。
- 简洁的组件化配置:将路由与组件有机结合,更好地组织项目结构。
- 多种模式选择:在现代浏览器下可以使用历史模式,为用户带来更佳的 URL 体验;在不支持的环境中则自动降级为哈希模式。
- 平滑的过渡动画:与 Vue 的过渡系统集成,可以轻松实现页面切换时的流畅过渡动画。
- 细粒度的导航控制:通过导航守卫,你可以在路由切换前后进行权限检查、数据预加载等逻辑处理。
- 个性化体验:包括可自定义的滚动行为,以及在活跃链接上自动添加 CSS 类,为用户提供更好的交互与界面反馈。
URL 模式
vue-router 有两种模式模拟 URL:hash 模式和 history 模式。(本项目使用默认的 hash 模式)
- hash 模式是默认模式,使用网页的 URL 模拟一个完整的 URL,当
#后的哈希值发生变化时,重新获取 hash 对应的页面(在 Vue.js 中是需要显示的组件),并将这些内容显示在页面中。 - history 模式针对的是支持 HTML 5 新特性
history的浏览器,其本身就是用户访问页面时浏览记录的堆栈,HTML 5 允许操作 history 栈中的内容。
PS:无论采用何种方式配置 vue-router,Vue.js 单页面应用都不会刷新页面。
实现方式的区别
- hash 模式的实现是通过
history.pushState()跳转路由;通过hashchange event监听路由变化。 - history 模式通过
history.pushState和history.replaceState改变 URL;通过popstate event监听路由变化,但无法监听到history.pushState()时的路由变化。
体验上的区别
- hash 只能改变#后的值,而 history 模式可以随意设置同源 url;
- hash 只能添加字符串类的数据,而 history 可以通过 API 添加多种类型的数据;
- hash 无需后端配置且兼容性好,而 history 需要配置
index.html用于匹配不到资源的情况; - hash 的历史记录只显示之前的
www.a.com而不会显示 hash 值,而 history 的每条记录都会进入到历史记录 (在 Chrome102 版本之后,hash 模式的完整 URL 也会加入浏览器的历史记录了)
添加页面
先回顾一下我们的项目目录结构
starblog-admin-ui
├── build
├── config
├── node_modules
├── src
│ ├── assets
│ ├── router
│ ├── components
│ ├── App.vue
│ └── main.js
├── static
├── test
├── README.md
├── index.html
├── package.json
└── yarn.lock
现在我要把 src/components 这个目录改成 views
然后在里面分别添加三个页面
Login.vueHome.vue404.vue
主页面
Home.vue 代码
<template>
<el-alert
title="主页"
type="success">
</el-alert>
</template>
<script>
export default {
name: "Home"
}
</script>
<style scoped>
</style>
登录页面
然后是 Login.vue 的
<template>
<el-alert
title="登录"
type="info">
</el-alert>
</template>
404 页面
还有 404.vue 的
<template>
<el-alert
title="未找到"
type="error">
</el-alert>
</template>
这时控制台应该会报错了,不过问题不大,先来配置路由
安装和配置
之前我们在使用 vue-cli 创建项目的时候选择了使用 vue-router,所以不需要安装了。
如果没有的话,需要手动安装进去(本项目使用的 vue-router 版本是 3.x,现在最新版已经是 4.x 了,安装的时候请注意选择对应的版本)
yarn add vue-router
然后在 src 目录下新建一个 router 目录,里面再新建个 index.js,代码如下
import Vue from 'vue'
import Router from 'vue-router'
import Login from "@/views/Login";
import Home from "@/views/Home";
import NotFound from '@/views/404'
Vue.use(Router)
export default new Router({
mode: 'history', // 这里可以设置模拟URL的模式
routes: [
{
path: '/',
name: 'Home',
component: Home,
},
{
path: '/Login',
name: 'Login',
component: Login
},
{
path: '/404',
name: 'NotFound',
component: NotFound
},
]
})
这里面有个 mode 设置,就是前面提到的两种模式模拟 URL,如果设置了 history,这样跳转页面的时候,浏览器的地址栏里面就是这个形式:
localhost:8080/loginlocalhost:8080/404
用默认的 hash 模式的话,就是这样:
localhost:8080/#/loginlocalhost:8080/#/404
都差不多,不过 history 模式好看一点,不过要 支持 HTML5 新特性 history 的浏览器,并且还需要在后端做一些配置 才可以实现~
测试页面
分别打开以下地址:
http://localhost:8080/#/http://localhost:8080/#/Loginhttp://localhost:8080/#/404
可以看到不同的信息就说明这一步完成了
老规矩,不贴图哈哈哈
收工~
StarBlog博客Vue前端开发笔记:(2)页面路由的更多相关文章
- Android请求网络共通类——Hi_博客 Android App 开发笔记
今天 ,来分享一下 ,一个博客App的开发过程,以前也没开发过这种类型App 的经验,求大神们轻点喷. 首先我们要创建一个Andriod 项目 因为要从网络请求数据所以我们先来一个请求网络的共通类. ...
- Android SwipeRefreshLayout 下拉刷新——Hi_博客 Android App 开发笔记
以前写下拉刷新 感觉好费劲,要判断ListView是否滚到顶部,还要加载头布局,还要控制 头布局的状态,等等一大堆.感觉麻烦死了.今天学习了SwipeRefreshLayout 的用法,来分享一下,有 ...
- Android Studio配置 AndroidAnnotations——Hi_博客 Android App 开发笔记
以前用Eclicps 用习惯了现在 想学学 用Android Studio 两天的钻研终于 在我电脑上装了一个Android Studio 并完成了AndroidAnnotations 的配置. An ...
- 前端开发笔记(1)html基础
HTML介绍 HTML是HyperTextMarkupLanguage超文本标记语言的缩写 HTML是标记语意的语言 编辑器 任何纯文本编辑器都能够编辑html,比如记事本,editplus,note ...
- Web前端,HTML5开发,前端资源,前端网址,前端博客,前端框架整理 - 转改
Web前端/H5开发,前端资源,前端网址,前端博客,前端框架整理 综合类 前端知识体系 前端知识结构 Web前端开发大系概览 Web前端开发大系概览-中文版 Web Front-end Stack v ...
- 极客Web前端开发资源大荟萃
前端开发已经成为当前炙手可热的技术之中的一个.本周我们除了给大家带技术相关资讯,另一些技术人员经常使用的站点.希望大家不要错过我们本周的内容.原文来自:极客标签 为神马说敲代码是非常艰难的 程序猿 做 ...
- SpringBoot技术栈搭建个人博客【前台开发/项目总结】
前言:写前台真的是我不擅长的东西...所以学习和写了很久很久...前台页面大概开发了两天半就开发好了,采用的静态的html和bootstrap来写,写后台的时候纠结住了...怎么说呢,写页面真的是头疼 ...
- web前端开发笔记(2)
一.什么是作用域. 所有变量都存在于一个执行环境中(也称作用域),这个执行环境决定了变量的生命周期,以及哪一部分代码可以访问其中的变量.总结: 执行环境有全局执行环境和函数执行环境. 每次进入一个新执 ...
- web前端开发笔记(1)
一.HTML标签书写有哪些规范? 页面编码. 文档声明. 关键字与描述. 行内元素不能包含块级元素. a标签不能嵌套a标签. 标签名和属性必须用小写字母书写,属性必须加引号,标签必须闭合,单标签页必 ...
- 极客Web前端开发资源大荟萃#001
每周极客都将总结本周最精彩的素材提供给大家,希望可以带给你更多地灵感和帮助!极客#GB课程库#现已上线,无论你是初级.中级.还是正在进修的高级前端工程师.这里都将帮助你得到更多更高效的学习.原文:极客 ...
随机推荐
- 邀请参与 2022 第三季度 Flutter 开发者调查
自 Flutter 3 发布之后,我们在以移动端为中心到多平台框架的路线上稳步前行,用 Dart 2.17 的新语言特性帮助大家提升工作效率,并对核心工具进行了改进,让您在跨平台打造优秀体验时更加得心 ...
- 邀请你参与字节跳动 UME 插件开发竞赛
UME 是由字节跳动 Flutter Infra 团队出品和维护的 Flutter 应用内调试工具.通过在 Flutter 应用中加入 UME 工具,开发者们可以直接在应用内查看调试信息,而无需使用 ...
- fastjson序列化导致prometheus返回监控数据格式错乱
在springboot 中集成prometheus的监控时遇见问题. 因为项目里在StaticResourceConfig配置了fastjson 序列化,导致prometheus接口返回数据被转化为j ...
- 立即报名 | 云原生 + AI Meetup 成都站 11.4 正式开启
2023 年,KubeSphere 社区已经在深圳.杭州.上海三个城市各组织了一场线下 Meetup.第四站,我们将走进天府成都. 11 月 4 日,云原生 + AI Meetup 成都站将正式开启! ...
- KubeSphere 部署 Zookeeper 实战教程
前言 知识点 定级:入门级 如何利用 AI 助手辅助运维工作 单节点 Zookeeper 安装部署 集群模式 Zookeeper 安装部署 开源应用选型思想 实战服务器配置(架构 1:1 复刻小规模生 ...
- 如何使用 VuePress 搭建博客网站并 Vercel 部署
先来看一下网站截图: 快速上手 1.创建并进入一个新目录 mkdir vuepress-starter && cd vuepress-starter 2.使用你喜欢的包管理器进行初始化 ...
- 全面解释人工智能LLM模型的真实工作原理(二)
前一篇:<全面解释人工智能LLM模型的真实工作原理(一)> 序言:在上一篇文章中,我们从原理上构建了一个识别"叶子"和"花朵"的神经网络,并详细讲解 ...
- JS 本地存储 localStorage 操作总结
现在前端做数据存储,跨页面传值,localStorage是一个很好的方式,以键值对的方式存储,也方便取值赋值,下面说一说使用方法和一些常见的使用技巧. 1.存值共有3种方式,localStorage相 ...
- jsp页面访问数据库根据数据情况,定时弹出提醒
需求:根据数据库情况,在页面定时弹出相应的消息 实现: 1. 展示DIV设置 <script language="javascript" type="text/ja ...
- 2024 Navicat Premium 16+17安装教程(附激活方法)
Navicat Premium,作为一款功能全面的集成数据库管理工具,无缝支持多样化的数据库类型,为用户带来前所未有的高效与便捷管理体验.它不仅涵盖了连接管理.数据导入导出.同步迁移.备份恢复等核心功 ...