vue前端项目--路由vue-router

1. 路由介绍

我们可以总结一下从早期网站开发到现代单页应用(SPA)的发展过程及其关键概念:

  1. 早期的服务器端渲染 (SSR):

    • 早期的网站开发中,服务器负责生成完整的 HTML 页面,并将其发送给客户端展示。

    • 每个 URL 对应一个特定的控制器(Controller),该控制器负责处理请求并生成相应的 HTML 内容。

    • 这种方式有利于搜索引擎优化(SEO),因为搜索引擎可以轻松抓取完整的 HTML 内容。

    • 缺点是页面更新时需要重新加载整个页面,导致用户体验不佳,且 HTML 和业务逻辑混杂在一起,难以维护。

  2. 前后端分离:

    • 随着 Ajax 技术的出现,前后端分离成为可能。

    • 在这种模式下,后端提供 API 接口返回数据,前端通过 JavaScript (如 Ajax 请求) 获取这些数据,并动态地渲染到用户界面上。

    • 这种模式提高了开发效率,使前后端职责更加清晰,后端专注于数据处理,前端专注于 UI 和交互。

    • 这种模式也适用于移动应用开发,因为后端可以提供统一的数据接口供不同平台调用。

  3. 单页应用 (SPA):

    • SPA 是一种构建 Web 应用的方式,它使用单一 HTML 页面,并依赖 JavaScript 动态更新页面的不同部分。

    • SPA 使用前端路由来管理页面状态,这意味着用户在应用内导航时,浏览器地址栏中的 URL 会改变,但不会触发页面的整体重载。

    • 这种方式提供了更好的用户体验,因为它减少了页面加载时间和上下文切换的感觉。

    • SPA 的实现通常涉及到前端框架如 Vue.js、React 或 Angular,它们都提供了相应的路由管理解决方案(例如 Vue Router)。

  4. 前端路由:

    URL和前端页面的映射关系。
    -----> vue router

    前端路由的核心是什么呢?
    改变URL,但是页面不进行整体的刷新。

2. 前端路由的核心:改变URL,但是页面不进行整体的刷新

在单页应用(SPA)中,前端路由的核心是改变URL的同时,不进行页面的整体刷新。这使得应用能够提供更加流畅的用户体验,类似于桌面应用。前端路由的实现主要有两种方式:使用URL的hash和使用HTML5的history API。

1. URL的hash

URL的hash指的是URL中#符号后面的部分。例如,http://example.com/#/about中的#/about就是hash部分。使用hash可以改变URL而不触发页面的刷新。

基本操作:

  • 设置hash

    window.location.hash = '#/home';

    这会将URL设置为http://example.com/#/home,但页面不会重新加载。

  • 监听hash变化

    window.addEventListener('hashchange', () => { console.log('Hash changed:', window.location.hash); });

    通过监听hashchange事件,我们可以在hash变化时执行相应的逻辑。

2. HTML5的history API

HTML5的history API提供了一组方法来操作浏览器的历史记录,而不触发页面的刷新。主要方法包括pushStatereplaceStatebackforwardgo

基本操作:

  • pushState

    history.pushState({}, '', '/home');

    这会将一个新的条目添加到浏览器历史记录栈中,并将URL设置为/home,但不会触发页面刷新。

  • replaceState

    history.replaceState({}, '', '/home');

    这会替换当前的历史记录条目,而不是添加一个新的条目。

  • backforwardgo

    history.back(); // 相当于 history.go(-1) history.forward(); // 相当于 history.go(1) history.go(-1); // 后退一页 history.go(1); // 前进一页

监听popstate事件:

当使用pushStatereplaceState改变URL时,不会触发popstate事件。但当用户点击浏览器的后退或前进按钮时,会触发popstate事件。

window.addEventListener('popstate', (event) => { console.log('Location changed:', window.location.pathname); });

3. 路由的基本使用

3.1 声明式导航-导航链接

在现代前端框架(如Vue.js、React等)中,声明式导航是一种通过定义导航链接来处理页面路由的方式。声明式导航使用HTML标签和框架提供的组件来定义页面间的导航,而不是通过编写JavaScript代码来进行页面跳转。这使得代码更简洁、易读和易于维护。

Vue.js 中的声明式导航

Vue.js 提供了 vue-router 这个库来处理路由。通过 vue-router,我们可以使用 <router-link> 组件来定义导航链接。

首先,定义路由配置:

// router.js
import Vue from 'vue';
import Router from 'vue-router';
import Home from './components/Home.vue';
import About from './components/About.vue';Vue.use(Router);export default new Router({routes: [{path: '/',name: 'Home',component: Home},{path: '/about',name: 'About',component: About}]
});

然后,在模板中使用 <router-link> 进行声明式导航:

<template><div><nav><router-link to="/">Home</router-link><router-link to="/about">About</router-link></nav><router-view></router-view></div>
</template>

在这个例子中,<router-link> 组件会生成相应的 <a> 标签,并自动处理导航逻辑。当用户点击链接时,URL 会更新,但不会触发页面刷新。

3.2 声明式导航-查询参数传参

在现代前端框架Vue.js中,声明式导航不仅可以用于定义简单的页面导航链接,还可以通过查询参数传递数据。这种方式允许我们在导航链接中包含参数,从而使目标页面能够根据传递的参数进行不同的处理。

在 Vue.js 中,我们可以使用 vue-router 的 query 选项来传递查询参数。

首先,定义路由配置:

// router.js
import Vue from 'vue';
import Router from 'vue-router';
import Home from './components/Home.vue';
import About from './components/About.vue';Vue.use(Router);export default new Router({routes: [{path: '/',name: 'Home',component: Home},{path: '/about',name: 'About',component: About}]
});

然后,在模板中使用 <router-link> 进行声明式导航,并传递查询参数:

<template><div><nav><router-link :to="{ path: '/about', query: { id: 123 }}">About</router-link></nav><router-view></router-view></div>
</template>

在目标组件中,您可以通过 $route.query 来获取查询参数:

// About.vue
<template><div><h1>About Page</h1><p>Query ID: {{ id }}</p></div>
</template><script>
export default {computed: {id() {return this.$route.query.id;}}
};
</script>

3.3 声明式导航-动态路由传参

3.3.1 动态路由传参方式

配置动态路由

  • 动态路由后面的参数可以随便起名,但要有语义
 const router = new VueRouter({routes: [...,{ path: '/search/:words', component: Search }]})

配置导航链接

  • to="/path/参数值

对应页面组件接受参数

  • $route.params.参数名
  • params后面的参数名要和动态路由配置的参数保持一致

3.3.2 查询参数传参 VS 动态路由传参

查询参数传参 (比较适合传多个参数)

  1. 跳转:to="/path?参数名=值&参数名2=值"
  2.  获取:$route.query.参数名

动态路由传参 (优雅简洁,传单个参数比较方便)、

  1. 配置动态路由:path: "/path/:参数名"
  2. 跳转:to="/path/参数值"
  3. 获取:$route.params.参数名

3.4 编程式导航-两种路由跳转方式

3.5 编程式导航-name命名路由传参

1.name 命名路由跳转传参 (query传参)

this.$router.push({name: '路由名字',query: {参数名1: '参数值1',参数名2: '参数值2'}})

2.name 命名路由跳转传参 (动态路由传参)

this.$router.push({name: '路由名字',params: {参数名: '参数值',}})

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于CUDA12.1+CUDNN8.9+PYTORCH2.3.1,实现自定义数据集训练

目录 0 结果预览 1 核心点 2 参考链接 0 结果预览 1 核心点 yolo命令行CL需要将虚拟环境的yolo程序加入系统路径。 遇到conda install 失效问题&#xff0c;重建新的虚拟环境&#xff0c;再进行安装。 whl可以下载好后再安装。 pip install F:\tool\ai\torch-2.3.1cu…

leetcode日记(64)最小覆盖子串

很复杂的题目&#xff0c;无论是思路还是实践都很难… 思路还是看了答案&#xff08;&#xff1f;&#xff09;设定两个指针“框”出一串字符串&#xff0c;初始两个指针都指在s的零位&#xff0c;先移动下指针&#xff0c;直到使框出的字符串中包含t中所有字符串&#xff0c;…

JDK17安装与配置

为了学习spring boot3.x&#xff0c;首先确保本地安装了17以上的jdk版本。 安装版本&#xff1a;jdk-17.0.10_windows-x64_bin.exe 傻瓜式安装&#xff0c;步骤省略&#xff0c;这里设置的安装位置&#xff1a;D:\Programs\Java\jdk-17 JAVA_HOME环境变量配置&#xff1a; #…

容器七层负载均衡解决方案——IngressNGINX

一、概述 当我们使用 K8S 对容器进行编排时&#xff0c;基于负载均衡和高可用方面考虑&#xff0c;且设计上 Pod 易失态&#xff0c;不能直接使用 PodIP 作为外部访问的方式。因此&#xff0c;K8S 官方提供了一些负载均衡的解决方案。这其中有四层和七层两种&#xff0c;本文主…

养猫必看!热销猫罐头有哪些?2024年推荐这4款口碑很好的主食罐

开猫咖3年啦&#xff0c;店里有加菲&#xff0c;美短&#xff0c;布偶&#xff0c;暹罗&#xff0c;都是我一手带大的。店铺开在高校附近&#xff0c;顾客以学生为主&#xff0c;也有很多养猫人士会到店里来&#xff0c;和我交流选粮经验。很多养猫人都在喂主食罐头&#xff0c…

FreeRTOS基础入门——FreeRTOS的任务基础知识(四)

个人名片&#xff1a; &#x1f393;作者简介&#xff1a;嵌入式领域优质创作者&#x1f310;个人主页&#xff1a;妄北y &#x1f4de;个人QQ&#xff1a;2061314755 &#x1f48c;个人邮箱&#xff1a;[mailto:2061314755qq.com] &#x1f4f1;个人微信&#xff1a;Vir2025WB…

Leetcode每日刷题之字符串相加(C++)

在学习的同时也不要忘记适当练习&#xff0c;本题字符串相加主要在于字符串类型与整数类型的转化&#xff0c;要将字符串类型转化为整数类型计算后转化为字符串类型输出即可。 思路解析 根据题中给出的信息&#xff0c;我们不可以使用库函数计算大整数&#xff0c;也不能直接将…

做空日经指数的策略与时机

一、市场背景分析 在全球股市的剧烈波动中&#xff0c;日本股市的表现尤为引人关注。日经225指数在经历一轮暴跌后&#xff0c;又出现了大幅反弹&#xff0c;这种剧烈的波动为投资者提供了做空日经指数的机会。近期&#xff0c;日本股市受到日元汇率波动、日本央行货币政策以及…

C++中的string的介绍(从string到STL)

C中的string的介绍 文章目录 C中的string的介绍1. 从string到STL2. string 的构造函数3. string 的iterator&#xff08;迭代器&#xff09;4. string 中的元素访问5. string 中容量相关6. string 中的插入删除7. string 中的查找8. string 的剩余函数 1. 从string到STL 严格来…

【轻松拿捏】Java是如何实现跨平台性的?

Java是如何实现跨平台性的&#xff1f; 一、Java 的跨平台性主要通过以下几个核心机制实现&#xff1a; 二、具体实现 三、示例 四、JVM 工作示意图 五、总结 &#x1f388;边走、边悟&#x1f388;迟早会好 一、Java 的跨平台性主要通过以下几个核心机制实现&#xff…

CICD流水线

一、CICD流水线简介 CICD概念 CI/CD流水线是现代软件开发的一个核心概念&#xff0c;它涉及自动化和管理软件从开发到部署的整个生命周期 概念定义 具体有三点&#xff1a;持续集成、持续交付、持续部署 流水线组成为&#xff1a;代码提交、测试、构建、部署、结果通知 二…

PHP最新可用获取QQ昵称API接口源码_非第三方

PHP最新可用获取QQ昵称API接口源码&#xff0c;运行环境为php7-8都可以&#xff0c;内容为直接调用QQ空间接口 在需要展示QQ昵称处&#xff0c;直接调用以下函数就可以。 例如&#xff1a;get_qq_nick(123456)就会直接输出123456的qq号昵称。 API源码下载&#xff1a;QQ昵称AP…

第R2周:LSTM-火灾温度预测:一文搞懂LSTM(长短期记忆网络)

一文搞懂LSTM&#xff08;长短期记忆网络&#xff09; 一句话介绍LSTM&#xff0c;它是RNN的进阶版&#xff0c;如果说RNN的最大限度是理解一句话&#xff0c;那么LSTM的最大限度则是理解一段话&#xff0c;详细介绍如下&#xff1a; LSTM&#xff0c;全称为长短期记忆网络(Lo…

python-鼠标绘画线条程序

闲来无聊简单编写了一个绘图小程序。 主要思路 主要是基于Python中的内置模块turtle编写的&#xff0c;简单扩展了一下&#xff0c;通过绑定事件能够达到鼠标绘制、删除、存储已经绘制图案的线条这几个功能。 路径结构 -draw- define.py- main.py- myturtle.py使用 点住鼠…

Element学习(入门)(1)

1、Element官网&#xff1a;https://element.eleme.cn/#/zh-CN 2、来源与用处 3、Element的快速入门 &#xff08;1&#xff09; &#xff08;2&#xff09;在入口文件&#xff08;main.js&#xff09;中引入 &#xff08;3&#xff09; 4、快捷键ctrlc&#xff0c;在当前的项目…

zsh 配置 docker 自动补全

zsh 配置 docker 自动补全 在终端中使用 docker 的命令的时候必须要全部手敲&#xff0c;没有提示&#xff0c;于是就在找是否有自动补全的脚本&#xff0c;搜索了一圈踩了一些坑总结了一下具体的步骤。 首先执行如下命令&#xff1a; mkdir -p ~/.zsh/completion curl -L h…

JavaEE: 查看线程信息

示例用代码 public class Main {static class MyThread extends Thread {Overridepublic void run() {while (true) {System.out.println("hello thread");try {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}}}}public st…

Python 用户输入和while循环

1、input()函数的工作原理&#xff08;用户输入&#xff09; input()函数让程序暂停运行&#xff0c;等待用户输入一些文本。获取用户输入后&#xff0c;Python将其赋给变量&#xff0c;以其使用。 在input()函数接受一个参数&#xff0c;既要向用户显示的提示&#xff0c;为了…

Linux 利用 ftrace 分析内核调用

目录 一、概述二、ftrace 的使用1、常用信息2、指定 ftrace 跟踪器3、设置要跟踪的函数4、ftrace 的开关5、function 跟踪程序6、function_graph 跟踪程序7、函数过滤器8、跟踪事件 三、trace-cmd 的使用1、常见命令2、常用选项2.1 列出可用的追踪器2.2 跟踪特定进程的函数调用…

计算机毕业设计选题推荐-课程教学平台-Java/Python项目实战

✨作者主页&#xff1a;IT毕设梦工厂✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…