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

news2024/9/25 19:25:44

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.coloradmin.cn/o/1989058.html

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

相关文章

学习笔记 韩顺平 零基础30天学会Java(2024.8.7)

P481 Math方法 利用random返回一个[2,7]之间的随机数&#xff1a; 因为random只能返回[0,1)之间的随机数&#xff0c;因此做一下处理&#xff1a;[(int)(a), (int) (aMath.random()*(b-a1))]&#xff0c;对于Math.random()*(b-a1)&#xff0c;其中b-a1&#xff0c;它乘上[0,1)相…

PFC+DAB原理介绍

三、PFCDAB原理介绍 1、PFC工作原理 三相交流电网的一个公认拓扑是三相全桥 PFC。此拓扑也称为 B6 或“三段桥”。如图显示此拓扑仅使用三相交流输入运行。如果需要单相工作模式。可以轻松地通过增加中性线实现 三相电源包含三个交流相位&#xff0c;通常用 L1、L2 和 L3 表…

linux使用ssh连接一直弹出密码框问题

1.查看ssh服务的状态 输入以下命令&#xff1a; sudo service sshd status 小编已经安装了。 如果出现 Loaded: error (Reason: No such file or directory) 提示的话&#xff0c;说名没有安装ssh服务&#xff0c;按照第二步&#xff1a;安装ssh服务。 如果出现 Active: in…

sql中表和表之间基础的关系以及,多种连接查询和select的字句

1&#xff0c;表与表之间的关系 一对一 网上购买商品 一个订单是不是只能有一个地址 一对多 一个老师 可以教多个学生 但是 一个学生一个科目只能对应一个老师 多对多 一个学生在学校可以选修多门课程 一门课程可以被多个学生选择 数据准备 CREATE table h_employ…

WeNet 2.0:更高效的端到端语音识别工具包

WeNet 2.0:更高效的端到端语音识别工具包 原文链接&#xff1a;[2203.15455] WeNet 2.0: More Productive End-to-End Speech Recognition Toolkit (arxiv.org) 1.摘要 WeNet是一个开源的端到端语音识别工具包&#xff0c;WeNet 2.0在此基础上进行了四项主要更新&#xff0c…

简明 | Yolo-v3结构理解摘要

简明 | ResNet特点、残差模块、残差映射理解摘要 目录 整体结构 DBL Res-n Res-unit concat 上采样 整体结构 网络主要包括两部分&#xff0c;一个部分是主干网络Darknet-53&#xff0c;一个部分使用特征金字塔(FPN)融合、加强特征提取并利用卷积进行预测。 DBL DBL&am…

从人工巡检到智能监管:视频AI智能监管技术驱动风电场智慧化发展

一、背景分析 随着全球对可再生能源需求的持续增长&#xff0c;风电作为清洁、可再生的能源形式&#xff0c;其重要性日益凸显。然而&#xff0c;风电场通常分布在偏远地区&#xff0c;面积广阔&#xff0c;环境复杂多变&#xff0c;这给风电场的运维管理带来了巨大挑战。为了…

CleanMyMac可以一键清理电脑,让Mac系统运行得更加流畅。有关CleanMyMac可以删除Mac重复的文件吗?苹果电脑怎么快速找到重复文件的问题?

一、CleanMyMac可以删除Mac重复的文件吗 作为一款专业级的苹果电脑清理软件&#xff0c;CleanMyMac具备多项深度清理和系统维护工具。软件拥有强大的文件管理系统&#xff0c;可以利用“空间透镜”等工具&#xff0c;筛选出相同体积、名称的文件。 图1&#xff1a;用CleanMyMa…

计算机网络408考研 2019

计算机网络408考研2019年真题解析_哔哩哔哩_bilibili 2019 1 1 1 1

麦田物语第二十天

系列文章目录 麦田物语第二十天 文章目录 系列文章目录一、构建地图信息系统二、生成地图数据 一、构建地图信息系统 我们上一节课已经做好了鼠标的显示&#xff0c;这节课需要构建地图的一些信息&#xff0c;例如&#xff1a;可挖坑&#xff0c;可丢弃物品等地区。我们点击地…

Altium designer学习笔记02 - 原理图库的创建与绘制

原理图库的创建与绘制 1. 元件符号的概述2. 单部件元件符号的绘制-实例电容3.子件原件符号的创建绘制&#xff08;示例 放大器&#xff09;4.已存在原理图直接生成元件库5.元件库的拷贝6.元件的检查与报告 1. 元件符号的概述 元件符号是元件在原理图上的表现形式&#xff0c;主…

Java语言程序设计——篇十二

&#x1f33f;&#x1f33f;&#x1f33f;跟随博主脚步&#xff0c;从这里开始→博主主页&#x1f33f;&#x1f33f;&#x1f33f; 欢迎大家&#xff1a;这里是我的学习笔记、总结知识的地方&#xff0c;喜欢的话请三连&#xff0c;有问题可以私信&#x1f333;&#x1f333;&…

winform chart标记

下图为某个点的值大于25即标记为白色。 代码&#xff1a; // 设置曲线的样式Series series chart1.Series[1];// 画样条曲线&#xff08;Spline&#xff09; 散点图Pointseries.ChartType SeriesChartType.Spline;// 线宽2个像素series.BorderWidth 2;// 线的颜色&…

K8S Helm

简述 Helm 是 Kubernetes 的开源包管理器。它提供了提供、共享和使用为 Kubernetes 构建的软件的能力。它允许开发者定义、‌打包、‌发布和管理Kubernetes应用资源&#xff0c;‌类似于Linux下的apt或yum包管理器。‌Helm3的架构主要包括Helm客户端、‌Chart仓库以及Kubernet…

程序员窃喜!卡了大模型脖子的Json输出,OpenAI终于做到了100%正确

OpenAI上次提到JSON模式的概念&#xff0c;还是在去年的DevDay上。那是ChatGPT第一次拥抱JSON模式。 但这个功能可以说是饱受诟病。 经常遇到模型不遵循指令&#xff0c;不按照你想要的格式输出&#xff0c;即使在 prompt 中明确说了要按照指定格式&#xff08;比如Json、XML&…

【Java】字符/字符串转整数 常用的三个方法

前言&#xff1a; 做Oj题时&#xff0c;偶尔需要用到&#xff0c;久了不用&#xff0c;用到就得查一下&#xff0c;遂总结一篇用法&#xff0c;加深记忆。 目录 方法1&#xff1a;使用字符的ASCII值&#xff08;字符&#xff09; 方法2&#xff1a;使用Character.getNumeri…

【GCC】结合GPT4 延迟梯度学习1:公式推导及理论分析

大神的分析 本文主要借鉴。【TWCC 】基于gpt和python简化分析webrtc拥塞控制论文: Analysis and Design of the Google Congestion Contro for Web Real-time Communication (WebRTC)感觉应该学习好理论后再进行python 分析:【gcc】基于gpt和python的流程和延迟梯度分析另外:…

html+css+js前端作业qq音乐官网5个页面 带js

htmlcssjs前端作业qq音乐官网5个页面 带js 有轮播图&#xff0c;tab切换等多种效果 网页作品代码简单&#xff0c;可使用任意HTML编辑软件&#xff08;如&#xff1a;Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编…

Flink 实时数仓(九)【DWS 层搭建(三)交易域汇总表创建】

前言 今天立秋&#xff0c;任务是完成 DWS 剩余的表&#xff0c;不知道今天能不能做完&#xff0c;欲速则不达&#xff0c;学不完就明天继续&#xff0c;尽量搞懂每一个需求&#xff1b; 1、交易域下单各窗口汇总表 任务&#xff1a;从 Kafka 订单明细主题读取数据&#xff0…

【Linux-WMware Tools安装失败“segmentation fault”解决方法】

VMware版本&#xff1a;17 Ubuntu版本: 22.04 安装常规办法&#xff0c;通过vmware安装Tool&#xff0c;安装显示报错&#xff1a;“segmentation fault”&#xff0c;查了下可能是tool和ubuntu版本不兼容导致的。解决办法&#xff1a;通过命令行逐次安装。 1、sudo apt insta…