Vue3专栏项目 -- 三、使用vue-router 和 vuex(上)

前面我们开发了两个页面的组件,现在我们需要把它们分成几个页面了,那么一个网页多个页面我们都熟悉,针对不同的url渲染不同的html静态页面,这是web世界的基本工作方式。

有时候我们点击一个东西,地址栏的路由跳转,并且刷新了页面跳转到了新的页面;还有一种就是我们点击一个东西,地址栏的路由跳转了,页面内容变了,不过它没有刷新没有跳转到新的页面,这是通过window的history.pushState()方法来跳转到对应的url,这种就是SPA

history.pushState()方法中有三个参数,一个状态对象,一个标题(目前被忽略),和可选的URL

一般的场景就是先跳转到这个路由,然后JS通过Ajax发送异步请求获得需要的数据,然后再用document.getElementById().innerHTML=``的方式给他动态渲染出来

一、什么是SPA应用?

·一种Web应用程序或网站

·在和用户交互的时候不会跳转到其他的页面

·由JS实现URL变换和动态变换HTML的内容

SPA应用的优点:

·速度快,第一次下载完成静态文件,跳转不需要再次下载

·体验好,整个交互趋于无缝,更倾向于原生应用

·为前后端分离提供了实践场所

二、添加路由页面基础结构

如下图,在src下新建views的文件夹,就是页面,一个Home.vue首页,一个Login.vue登录页

三、vue-router 安装和使用

我们要先去安装vue-router,npm install vue-router@next --save 即安装最新版本的vue-router

我们来看看整个页面的结构,共性是头部标题GlobalHearder和Footer底部是都有的,然后中间的内容是随着路由进行不断的变化的。所以我们的组件结构也应该跟着发生变化

如下,App.vue是整个应用的入口组件,在所有页面中都使用的组件我们就放在这个App.vue中,比如说GlobalHearder和Footer这两个在哪个页面都是要出现的,所以我们放在这里,而跟随这个路由不断变化的页面我们放在这个紫色区域里称为页面内容,当url为默认即 / 的话我们就渲染这个Home.vue这个组件,假如url为 /login 我们就渲染这个login.vue等等

当vue-router被添加到页面当中去,它就会内置两个组件,帮我们完成这个任务。

一个称为router-link,这个组件和a链接很想,但是它是用来组件内进行导航的,通过传入“ to ”属性来指定链接,然后就可以进行导航了

另一个称为router-view,它被称为路由出口,路由匹配到的组件都会将渲染到这里,所以图中那个紫色区域就是一个router-view

四、vue-router 配置路由、通过router-link实现路由跳转

我们需要在main.ts中从vue-router中引入createRouter,通过createRouter,这个history决定了你采用哪种类型的路由,是哈希hash还是web,我们上面讲过HTML5的history API ,它是使用pushState来实现路由的变化。

在这个方法之前还有一种称为哈希,它实现一样的功能,哈希格式就是'url#create.html',它是为了解决之前不支持HTML5history的一种实现方式,它是HTML5之前出现的,它从一个哈希值转换为另一个哈希值,比如从'url#create.html' 转换为 'url#home.html' 这时候这个页面是不会刷新的,但是它有挺多缺点,唯一优点就是支持各种旧版浏览器。

所以我们这里采用history的方式,不采用哈希的方式。为了使用history这种方式,我们就需要从vue-router中导入createWebHistory,如果是哈希我们就需要导入createHashHistory

然后定义路由信息,routes数组,里面都是一个个对象,对象中就是path路径、name名称、component组件

我们想点击那个开始写文章的按钮,就跳转到另外一个路由跳转到登录,这时候就需要使用到提供好的组件router-link,我们到GlobalHearder中添加,把登录注册替换成router-link,它的用法和a链接是一样的,只不过它跳转到路由的属性称为to

如下,把a标签改为router-link

如下,点击登录即可跳转到登录页面,点击写作专栏就跳转到首页

五、vue-router 添加路由(给columnDetail添加动态路由参数,使得可以从url中获取column id,从而得到当前要访问的是哪个专栏内容,可以跳转到变化的url)

还有一个常见的需求就是在组件中拿到url的不同参数,从而进行下一步的处理,有一系列的页面应该都很需要这样的数据,比如我们接下来要做的colimnDetail页面,我们可能会需要url上的数据,比如我们需要url上这个专栏详情页的id,从而去获取具体是哪个专栏内容这样子。

我们去了解一下url的结构,下图就描述了url整个结构

protocol就是协议,auth字段由username和password组成的,接下来是host,由hostname网址和port端口号组成,接下来是pathname,之后是query一般是一个值等于另外一个值,一般会添加一些检索条件,有多个的时候可以用&符号连接起来,最后就是哈希hash值,是在#后

我们先创建一个组件

如何访问url这些参数

如下,我们url中添加一个query,如下?后添加search=123,那么里面就会添加一个query,query中就会添加一个search:123

我们再添加一个哈希值即加个#aaa,那么也会在里面假如hash值

我们的任务是根据column id来获取相对应的内容,所以我们在url上面就需要有个动态变化的值来指代它的id,这时候我们就可以通过vue-router来帮助我们,它有一个特性就称之为动态路由匹配。

如下,我们可以在vue-router的路由路径中使用动态路径参数来达到这个效果,比如如下可以path:'/user/:id' ,在后面加上动态路径参数 id,以冒号开头

如下,给path:'/column' 添加上:id ,变成path:'/column/:id' ,这样就修改成了动态路由的参数

然后我们再来改一下,给url加上id,如下

现在的问题就是如何跳转到类似的url,之前使用router-link编写都是写死的url,现在我们要跳转到变化的url

比如我们点击首页某个专栏后,就跳转到这个专栏内容的页面,我们怎么做?

如下,我们把进入专栏这个按钮从a链接标签变成router-link标签,然后这个to要变成动态的,要往to中传入一个对象,这个对象中应该有你要前往的router name以及params

我们看看结果,我们点击首页某个专栏内容的进入专栏按钮,发现它能跳转到该专栏,url中也能拿到这个专栏的id

还有一个方式是使用这个模板字符串,都一样的,这个就简单一些

我们除了使用router-link进行跳转,我们还需要在程序中也就是JavaScript中进行跳转,比如登录成功,我们就需要把它跳转到首页,这时候我们就可以使用vue-router的另外一个钩子函数

如下我们那login.vue做实验

注意导入的这个useRoute和useRouter作用是不同的,useRoute是获取路由信息,useRouter是定义路由的一系列行为

如下,在login.vue中加入useRouter,输入密码提交后,如下加入验证通过,则给router中push这个名为column的id为1的路径

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

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

相关文章

二级等保与三级等保的区别有哪些

二级等保和三级等保的区别主要体现在保护能力、安全要求、监管严格程度等方面。以下是根据提供的搜索结果中关于二级和三级等保的具体差异: 1. 保护能力: 二级等保要求信息系统能够防护来自外部小型组织的威胁,发现重要的安全漏洞和事件&…

机器学习实战宝典:用scikit-learn打造智能应用

书接上文——《数据探险家的终极指南:用Python挖掘机器学习的奥秘》 前文我们在这段精彩的机器学习探险之旅中,从基础概念出发,深入探索了使用Python和scikit-learn库进行数据分析和模型构建的全过程。 我们首先了解了机器学习的基本原理&am…

Nextcloud私有云盘-重新定义云存储体验

Nextcloud私有云盘-重新定义云存储体验 1. 什么是Nextcloud ​ Nextcloud是一个开源的云存储和协作平台,旨在为个人用户、企业和团队提供安全、隐私保护的数据存储和共享解决方案。它允许您在不同设备之间同步、共享文件,提供了强大的协作工具和应用生…

上网卡免费领取,无成本,免费领,超暴力蓝海项目

随着短视频和直播的流行,对大流量电话卡的需求日益增加。我们提供100G-300G大流量电话卡,包含100多分钟语音通话,月费仅19-29元。这些都是三大运营商的靠谱已有号卡,全国免费领取并包邮到家。客户收到卡片后,可在线充值…

工作中使用IDEA查看Stream变化

工作中使用IDEA查看stream变化 代码debug调试 代码 package com.demo;import java.util.stream.LongStream;public class LamdaDemo {public static void main(String[] args) {long[] dataResult LongStream.of(1,5,7,9).filter(data -> data > 10).map(data -> da…

C++学习第二十九课:C++ 输入输出流详解:从基础到高级应用

在 C 中,流(stream)是一种用于实现输入输出操作的抽象概念。流可以看作是字节的流动,这些字节可以从一个地方流向另一个地方,例如从键盘输入到程序中,或者从程序输出到屏幕。C 提供了一套完整的流库来处理各…

C语言什么是散列法?

一、问题 什么是散列法? 二、解答 散列法是⼀种将字符组成字符串,转换为固定长度(⼀般是更短长度)的数值或索引值的⽅法,也叫哈希法,⼜可以称为杂凑法或关键码⼀地址转换法。 那么,通过散列函数…

嵌入式开发十一:GPIO端口的八种工作模式

功夫不负有心人,相信学习至此你已经掌握了入门STM32基础知识。希望通过前面的学习,你已经掌握了 STM32 开发的工具和方法。本篇博客我们将和大家一起来学习 STM32 的一个最基础设,这些外设实际项目中经常会用到,希望大家认真学习和…

Html生成自定义函数的图形(2024/5/10)

大概效果如下: 可以自定义函数和x的定义域。 我们可以使用数学表达式解析库来解析用户输入的函数方程,并根据给定的 x 区间计算函数的值,然后使用图表库绘制图形。 在这里,我将使用 math.js 库来解析数学表达式,并使…

杰发科技AC7801——ADC之Bandgap和内部温度计算

0. 参考 电流模架构Bandgap设计与仿真 bandgap的理解(内部带隙电压基准) ​ ​ 虽然看不懂这些公式,但是比较重要的一句应该是这个:因为传统带隙基准的输出值为1.2V ​ 1. 使用 参考示例代码。 40002000是falsh控制器寄…

2024数维杯数学建模竞赛A题完整代码和思路论文解析

2024数维杯数学建模完整代码和成品论文已更新,获取↓↓↓↓↓ https://www.yuque.com/u42168770/qv6z0d/bgic2nbxs2h41pvt?singleDoc# 2024数维杯数学建模A题34页论文已完成,论文包括摘要、问题重述、问题分析、模型假设、符号说明、模型的建立和求解&…

Python-VBA函数之旅-slice函数

目录 一、slice函数的常见应用场景 二、slice函数使用注意事项 三、如何用好slice函数? 1、slice函数: 1-1、Python: 1-2、VBA: 2、推荐阅读: 个人主页: https://blog.csdn.net/ygb_1024?spm1010.…

【Python特征工程系列】排列重要性法分析特征重要性-随机森林模型为例(案例+源码)

这是我的第277篇原创文章。 一、引言 排列重要性(Permutation Importance)是一种基于模型的方法,用于评估每个特征对模型性能的影响程度。该方法通过随机打乱单个特征的值并观察模型性能的变化,从而确定特征的重要性。如果某个特征…

postgresql主从复制

用vmware 搭建的两台虚拟机 操作系统:Ubuntu 24.04 Server版 数据库:postgresql 16.2 主库:192.168.2.11 从库:192.168.2.12 如果遇到网络无法上网,可参考一下 Vmware 搭建的Ubuntu 24.04 网络配置-CSDN博客 1.两…

实时路况信息:盲人出行的守护者

在这个快速发展的数字时代,科技的力量正以前所未有的方式改变着人们的生活,尤其是对于视障群体而言,技术的每一次进步都可能意味着独立与自由的新篇章。在这样的背景下,实时路况信息对盲人的帮助成为了社会关注的热点话题&#xf…

train_gpt2_fp32.cu

源程序 llm.c/test_gpt2_fp32.cu at master karpathy/llm.c (github.com) #include <stdio.h> #include <stdlib.h> #include <math.h> #include <time.h> #include <assert.h> #include <float.h> #include <string.h> #include…

【机器学习300问】85、Adam梯度下降优化算法的原理是什么?

Adam优化算法取了两个算法名称的首字母——Adaptive Moment Estimation的缩写&#xff0c;结合了Momentum算法和RMSprop算法的优点。在Momentum中&#xff0c;会计算前一时刻的梯度&#xff0c;并将其用于当前时刻的梯度更新&#xff1b;而RMSprop会对梯度的大小进行自适应调整…

闭散列哈希表

一、什么是 哈希 &#xff1f; 1.1 哈希概念 与 哈希冲突 在正式介绍闭散列哈希之前&#xff0c;我们需要明确 哈希 的概念。 哈希 &#xff1a;构造一种数据存储结构&#xff0c;通过函数 HashFunc() &#xff0c;使 元素的存储位置 与 其对应的键值 建立一一映射关系&…

数电——集成计数器(部分)

数电77-集成二进制同步计数器_哔哩哔哩_bilibili 74LS191 同步二进制可逆计数器 单时钟 功能&#xff1a; 要想有置零功能&#xff0c;可以将输入改为0000&#xff0c;然后运用功能里的置数功能 双时钟74LS193 四位同步二进制可逆计数器 功能&#xff1a; 74LS197 二-八-…

nestjs 全栈进阶--中间件

视频教程 22_nest中中间件_哔哩哔哩_bilibili 1. 介绍 在Nest.js框架中&#xff0c;中间件&#xff08;Middleware&#xff09;是一个非常重要的概念&#xff0c;它是HTTP请求和响应生命周期中的一个重要组成部分&#xff0c;允许开发者在请求到达最终的目的控制器方法之前或…