当前位置: 首页 > news >正文

Vue.js 单页应用(SPA)开发教程:从零开始构建你的第一个项目

单页应用(SPA,Single Page Application)是现代前端开发的主流模式。Vue.js 是一个非常适合构建 SPA 的框架,它通过 Vue Router 实现页面导航,通过组件化开发和状态管理实现复杂的交互功能。本篇教程将带你了解 SPA 的基本概念,并一步步创建一个 Vue.js 单页应用。


什么是单页应用(SPA)?

单页应用是一种只有一个 HTML 页面,通过 JavaScript 动态加载内容的应用。特点包括:

  • 页面切换时无需重新加载整个页面。
  • 提升用户体验,页面响应速度更快。
  • 依赖客户端渲染,通常与 API 配合使用。

常见的单页应用例子:

  • Gmail
  • Trello
  • 微信网页版

创建你的第一个 Vue.js SPA

1. 准备开发环境

在开始之前,请确保你的系统已安装以下工具:

  • Node.jsnpm:确保安装 Node.js(包含 npm)。
  • Vue CLI:Vue 的官方脚手架工具,用于快速搭建项目。

安装 Vue CLI:

npm install -g @vue/cli
2. 创建一个 Vue 项目

使用 Vue CLI 创建一个项目:

vue create vue-spa-demo

在提示中选择以下选项:

  • Default (Vue 3):选择默认配置(包含 Babel 和 ESLint)。
  • 或选择 Manually select features 自定义配置。

进入项目目录并启动开发服务器:

cd vue-spa-demo
npm run serve

你的项目现在运行在 http://localhost:8080


3. 安装 Vue Router

Vue Router 是 Vue.js 官方提供的路由管理工具,用于实现 SPA 的页面导航。

安装 Vue Router:

npm install vue-router

4. 配置路由

在项目中添加路由,以下是配置步骤:

4.1 创建路由文件

src 目录下创建一个名为 router/index.js 的文件,定义路由配置:

import { createRouter, createWebHistory } from 'vue-router';
import Home from '../views/Home.vue';
import About from '../views/About.vue';const routes = [{path: '/',name: 'Home',component: Home},{path: '/about',name: 'About',component: About}
];const router = createRouter({history: createWebHistory(),routes
});export default router;
4.2 创建页面组件

src/views 目录下创建两个页面组件:

Home.vue

<template><div><h1>首页</h1><p>欢迎来到单页应用的首页!</p></div>
</template><script>
export default {name: 'Home'
};
</script>

About.vue

<template><div><h1>关于我们</h1><p>这是关于我们页面。</p></div>
</template><script>
export default {name: 'About'
};
</script>
4.3 在主应用中加载路由

打开 src/main.js 文件,将路由添加到 Vue 应用中:

import { createApp } from 'vue';
import App from './App.vue';
import router from './router';createApp(App).use(router).mount('#app');

5. 配置导航菜单

App.vue 中添加导航链接,实现页面切换:

<template><div id="app"><nav><router-link to="/">首页</router-link><router-link to="/about">关于我们</router-link></nav><router-view></router-view></div>
</template><script>
export default {name: 'App'
};
</script><style>
nav {margin-bottom: 20px;
}
nav a {margin-right: 15px;text-decoration: none;color: blue;
}
nav a.router-link-active {font-weight: bold;color: red;
}
</style>
  • <router-link>:用于创建路由导航链接。
  • <router-view>:用于渲染当前激活的路由组件。

6. 增加动态路由

有时需要根据 URL 动态加载内容,例如显示用户的个人信息。

动态路由配置

router/index.js 中添加动态路由:

{path: '/user/:id',name: 'User',component: () => import('../views/User.vue')
}
创建动态页面组件

src/views/User.vue 中创建用户页面:

<template><div><h1>用户信息</h1><p>用户 ID:{{ userId }}</p></div>
</template><script>
export default {name: 'User',computed: {userId() {return this.$route.params.id;}}
};
</script>

访问 http://localhost:8080/user/123,页面将显示用户 ID。


7. 添加全局状态管理(可选)

对于更复杂的应用,你可能需要在多个组件之间共享状态。Vue 提供了两种主要的解决方案:

  • Vuex
  • Pinia(推荐)

以下是使用 Pinia 的示例:

安装 Pinia:
npm install pinia
配置 Pinia:

main.js 中注册 Pinia:

import { createPinia } from 'pinia';
const pinia = createPinia();
createApp(App).use(router).use(pinia).mount('#app');
创建状态管理文件:

src/stores/counter.js 中创建一个简单的计数器状态管理:

import { defineStore } from 'pinia';export const useCounterStore = defineStore('counter', {state: () => ({count: 0}),actions: {increment() {this.count++;}}
});
使用状态:

在组件中使用状态:

<template><div><p>计数器:{{ counter.count }}</p><button @click="counter.increment">增加</button></div>
</template><script>
import { useCounterStore } from '../stores/counter';export default {setup() {const counter = useCounterStore();return { counter };}
};
</script>

总结

通过本教程,你已经学会了如何:

  1. 创建一个 Vue.js 单页应用。
  2. 配置路由和动态页面。
  3. 使用 Pinia 管理全局状态。

Vue.js 提供了灵活的工具链和生态系统,使你可以快速构建现代单页应用。下一步,你可以尝试集成后端 API、优化性能,或者进一步学习服务端渲染(SSR)和 PWA 技术。如果你有任何疑问,欢迎随时交流!

相关文章:

Vue.js 单页应用(SPA)开发教程:从零开始构建你的第一个项目

单页应用&#xff08;SPA&#xff0c;Single Page Application&#xff09;是现代前端开发的主流模式。Vue.js 是一个非常适合构建 SPA 的框架&#xff0c;它通过 Vue Router 实现页面导航&#xff0c;通过组件化开发和状态管理实现复杂的交互功能。本篇教程将带你了解 SPA 的基…...

Linux C openssl aes-128-cbc demo

openssl 各版本下载 https://openssl-library.org/source/old/index.html#include <stdio.h> #include <string.h> #include <openssl/aes.h> #include <openssl/rand.h> #include <openssl/evp.h>#define AES_KEY_BITS 128 #define GCM_IV_SIZ…...

你了解哪些Java限流算法?

大家好&#xff0c;我是锋哥。今天分享关于【你了解哪些Java限流算法?】面试题。希望对大家有帮助&#xff1b; 你了解哪些Java限流算法? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Java 中常用的限流算法主要有以下几种&#xff0c;它们广泛应用于处理流量控…...

【漫话机器学习系列】065.梯度(Gradient)

梯度&#xff08;Gradient&#xff09; 在数学和机器学习中&#xff0c;梯度是一个向量&#xff0c;用来表示函数在某一点的变化方向和变化率。它是多变量函数的一阶偏导数的组合。 梯度的定义 设有一个标量函数 &#xff0c;它对 ​ 是可微的&#xff0c;则该函数在某一点的…...

BswM(基础软件管理)详解

BswM&#xff08;基础软件管理&#xff09;详解 BswM&#xff08;Basic Software Manager&#xff09; 是 AUTOSAR BSW 的核心模块之一&#xff0c;负责协调基础软件&#xff08;BSW&#xff09;各模块的行为&#xff0c;根据系统状态、规则或事件动态配置其他模块。其设计目标…...

上位机知识篇---GitGitHub

文章目录 前言Git&GitHub是什么&#xff1f;GitGitHub Git和GitHub的区别定位功能使用方式开源协作 Git常用命令操作1. 配置2. 仓库操作3. 文件操作4. 分支与合并5.远程操作6.撤销更改7.查看历史 GitHub常用操作1.创建仓库2.Fork仓库3.Pull Request4.Issue跟踪5.代码审查 G…...

网站快速收录:提高页面加载速度的重要性

本文转自&#xff1a;百万收录网 原文链接&#xff1a;https://www.baiwanshoulu.com/32.html 网站快速收录中&#xff0c;提高页面加载速度具有极其重要的意义。以下从多个方面详细阐述其重要性&#xff1a; 一、提升用户体验 减少用户等待时间&#xff1a;页面加载速度直接…...

Vue.js组件开发-实现全屏背景图片滑动切换特效

使用 Vue 实现全屏背景图片滑动切换特效的详细步骤、代码、注释和使用说明。 步骤 创建 Vue 项目&#xff1a;使用 Vue CLI 创建一个新的 Vue 项目。准备图片资源&#xff1a;准备好要用于背景切换的图片&#xff0c;并将它们放在项目的合适目录下。编写 HTML 结构&#xff1…...

DeepSeek r1本地安装全指南

环境基本要求 硬件配置 需要本地跑模型&#xff0c;兼顾质量、性能、速度以及满足日常开发需要&#xff0c;我们需要准备以下硬件&#xff1a; CPU&#xff1a;I9内存&#xff1a;128GB硬盘&#xff1a;3-4TB 最新SSD&#xff0c;C盘确保有400GB&#xff0c;其它都可划成D盘…...

LitGPT - 20多个高性能LLM,具有预训练、微调和大规模部署的recipes

文章目录 一、关于 LitGPT二、快速启动安装LitGPT高级安装选项 从20多个LLM中进行选择 三、工作流程1、所有工作流程2、微调LLM3、部署LLM4、评估LLM5、测试LLM6、预训练LLM7、继续预训练LLM 四、最先进的功能五、训练方法示例 六、项目亮点教程 一、关于 LitGPT LitGPT 用于 …...

deepseek R1 14b显存占用

RTX2080ti 11G显卡&#xff0c;模型7b速度挺快&#xff0c;试试14B也不错。 7B显存使用5.6G&#xff0c;14B显存刚好够&#xff0c;出文字速度差不多。 打算自己写个移动宽带的IPTV播放器&#xff0c;不知道怎么下手&#xff0c;就先问他了。...

无用知识研究:对std::common_type以及问号表达式类型的理解

先说结论&#xff1a; 如果问号表达式能编译通过&#xff0c;那么std::common_type就能通过。因为common_type的底层依赖的就是?: common_type的实现里&#xff0c;利用了问号表达式&#xff1a;ternary conditional operator (?:) https://stackoverflow.com/questions/14…...

MapReduce概述

目录 1. MapReduce概述2. MapReduce的功能2.1 数据划分和计算任务调度2.2 数据/代码互定位2.3 系统优化2.4 出错检测和恢复 3. MapReduce处理流程4. MapReduce编程基础参考 1. MapReduce概述 MapReduce是面向大数据并行处理的计算模型、框架和平台:   1. 基于集群的高性能并行…...

循环神经网络(RNN)+pytorch实现情感分析

目录 一、背景引入 二、网络介绍 2.1 输入层 2.2 循环层 2.3 输出层 2.4 举例 2.5 深层网络 三、网络的训练 3.1 训练过程举例 1&#xff09;输出层 2&#xff09;循环层 3.2 BPTT 算法 1&#xff09;输出层 2&#xff09;循环层 3&#xff09;算法流程 四、循…...

Mac cursor设置jdk、Maven版本

基本配置 – Cursor 使用文档 首先是系统用户级别的设置参数&#xff0c;运行cursor&#xff0c;按下ctrlshiftp&#xff0c;输入Open User Settings(JSON)&#xff0c;在弹出的下拉菜单中选中下面这样的&#xff1a; 在打开的json编辑器中追加下面的内容&#xff1a; {"…...

WPS数据分析000005

目录 一、数据录入技巧 二、一维表 三、填充柄 向下自动填充 自动填充选项 日期填充 星期自定义 自定义序列 1-10000序列 四、智能填充 五、数据有效性 出错警告 输入信息 下拉列表 六、记录单 七、导入数据 ​编辑 八、查找录入 会员功能 Xlookup函数 VL…...

CTF从入门到精通

文章目录 背景知识CTF赛制 背景知识 CTF赛制 1.web安全:通过浏览器访问题目服务器上的网站&#xff0c;寻找网站漏洞(sql注入&#xff0c;xss&#xff08;钓鱼链接&#xff09;,文件上传&#xff0c;包含漏洞&#xff0c;xxe&#xff0c;ssrf&#xff0c;命令执行&#xff0c…...

Flutter使用Flavor实现切换环境和多渠道打包

在Android开发中通常我们使用flavor进行多渠道打包&#xff0c;flutter开发中同样有这种方式&#xff0c;不过需要在原生中配置 具体方案其实flutter官网个了相关示例&#xff08;https://docs.flutter.dev/deployment/flavors&#xff09;,我这里记录一下自己的操作 Android …...

Springboot如何使用面向切面编程AOP?

Springboot如何使用面向切面编程AOP? 在 Spring Boot 中使用面向切面编程&#xff08;AOP&#xff09;非常简单&#xff0c;Spring Boot 提供了对 AOP 的自动配置支持。以下是详细的步骤和示例&#xff0c;帮助你快速上手 Spring Boot 中的 AOP。 1. 添加依赖 首先&#xff…...

51单片机(STC89C52)开发:点亮一个小灯

软件安装&#xff1a; 安装开发板CH340驱动。 安装KEILC51开发软件&#xff1a;C51V901.exe。 下载软件&#xff1a;PZ-ISP.exe 创建项目&#xff1a; 新建main.c 将main.c加入至项目中&#xff1a; main.c:点亮一个小灯 #include "reg52.h"sbit LED1P2^0; //P2的…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析

这门怎么题库答案不全啊日 来简单学一下子来 一、选择题&#xff08;可多选&#xff09; 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘&#xff1a;专注于发现数据中…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句&#xff0c;它能够让用户直接在浏览器内练习SQL的语法&#xff0c;不需要安装任何软件。 链接如下&#xff1a; sqliteviz 注意&#xff1a; 在转写SQL语法时&#xff0c;关键字之间有一个特定的顺序&#xff0c;这个顺序会影响到…...

Caliper 配置文件解析:config.yaml

Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

多模态大语言模型arxiv论文略读(108)

CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题&#xff1a;CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者&#xff1a;Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA

浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求&#xff0c;本次涉及的主要是收费汇聚交换机的配置&#xff0c;浪潮网络设备在高速项目很少&#xff0c;通…...

【JavaSE】多线程基础学习笔记

多线程基础 -线程相关概念 程序&#xff08;Program&#xff09; 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序&#xff0c;比如我们使用QQ&#xff0c;就启动了一个进程&#xff0c;操作系统就会为该进程分配内存…...

Razor编程中@Html的方法使用大全

文章目录 1. 基础HTML辅助方法1.1 Html.ActionLink()1.2 Html.RouteLink()1.3 Html.Display() / Html.DisplayFor()1.4 Html.Editor() / Html.EditorFor()1.5 Html.Label() / Html.LabelFor()1.6 Html.TextBox() / Html.TextBoxFor() 2. 表单相关辅助方法2.1 Html.BeginForm() …...

DeepSeek源码深度解析 × 华为仓颉语言编程精粹——从MoE架构到全场景开发生态

前言 在人工智能技术飞速发展的今天&#xff0c;深度学习与大模型技术已成为推动行业变革的核心驱动力&#xff0c;而高效、灵活的开发工具与编程语言则为技术创新提供了重要支撑。本书以两大前沿技术领域为核心&#xff0c;系统性地呈现了两部深度技术著作的精华&#xff1a;…...