vueapi对比
vueapi对比
John DoeVue API 对比
Created: 9/12/2025 15:01:19
Updated: 9/21/2025 15:47:36
Exported: 9/22/2025 18:30:19
Link: https://chatgpt.com/c/68c3c4fa-62d8-8320-b093-948aa7ef98f7
Prompt:vue中选项式api和组合式api
Response:
在 Vue 中,主要有两种编写组件的方式:选项式 API(Options API) 和 组合式 API(Composition API)。两者本质上是不同的编程范式,各有优缺点。
1. 选项式 API (Options API)
这是 Vue2 默认的写法,Vue3 仍然支持。
特点:
- 通过 配置项(options)来组织代码,如
data、methods、computed、watch、props等。 - 逻辑按 功能类型 分组,而不是按功能逻辑聚合。
示例:
1 | <script> |
优点:
- 上手简单,适合小型项目和初学者。
- API 直观,和 Vue2 兼容性好。
缺点:
- 当组件逻辑复杂时,
data、methods、watch里的逻辑分散,不利于逻辑复用和维护。 - 大型项目中不利于拆分和组织。
2. 组合式 API (Composition API)
这是 Vue3 引入的新写法,使用 setup() 或 <script setup> 组织逻辑。
特点:
- 通过 函数 的形式组织逻辑,把相关的数据和逻辑聚合在一起。
- 使用
ref、reactive、computed、watch等组合式函数。 - 更容易提取和复用逻辑(自定义 Hook/函数)。
示例:
1 | <script setup> |
优点:
- 逻辑按功能聚合,清晰易读。
- 逻辑复用方便(可抽取到 composable 函数)。
- 更灵活,能写更高阶的功能。
缺点:
- 对初学者来说学习成本较高(需要理解
ref、reactive、computed等)。 - 写法不如选项式直观。
3. 比较总结
| 对比点 | 选项式 API (Options API) | 组合式 API (Composition API) |
|---|---|---|
| 学习曲线 | 简单,容易上手 | 较复杂,需要理解响应式 API |
| 代码组织 | 按功能类型分组 | 按逻辑聚合分组 |
| 逻辑复用 | mixins(容易冲突) | composables(灵活、清晰) |
| 适用场景 | 小型项目,初学者 | 中大型项目,复杂逻辑复用 |
| Vue 版本支持 | Vue2 / Vue3 | Vue3 及以上 |
👉 结论:
- 小型项目或初学阶段 → 用 选项式 API,简单直观。
- 中大型项目 → 用 组合式 API,逻辑清晰,方便扩展和复用。
Prompt:我看不懂
Response:
没关系 👍 我帮你把 Vue 的 选项式 API 和 组合式 API 用最简单的方式解释。
你可以把它们理解成 两种写代码的风格:
选项式 API(Options API)
👉 就像做饭时,把 食材放在一个篮子,调料放在另一个篮子,工具放在第三个篮子。
data:存放数据(食材)methods:存放方法(做菜的动作)computed:存放计算结果(菜做好了)
代码例子(Vue2/3 都能用):
1 | <script> |
📌 特点:容易上手,但是如果菜很多(逻辑复杂),找东西麻烦。
组合式 API(Composition API)
👉 就像做饭时,你把 相关的东西放在一起:食材 + 工具 + 做法都放到一个小盒子里。
- 用
ref和reactive定义数据 - 用
computed定义计算属性 - 用函数把逻辑组织在一起
代码例子(Vue3 用法):
1 | <script setup> |
📌 特点:写起来有点难,但逻辑很清楚,而且方便拆分复用。
对比总结
- 选项式 API:分类存放 → 简单,好理解,但逻辑复杂时不好找。
- 组合式 API:逻辑打包 → 稍微难点,但结构清晰,适合大项目。
Prompt:什么是vue router
Response:
好的,我用简单的语言帮你解释 Vue Router 👇
🌐 什么是 Vue Router?
Vue Router 就是 Vue.js 官方的路由管理器。
你可以把它理解成一个 地图导航系统,专门帮你在不同的“页面”之间切换。
🚗 类比一下
- 在网页里,其实只有一个 index.html 文件(单页面应用 SPA)。
- 但是我们希望看起来像有很多页面:主页、关于页、详情页…
- Vue Router 就是“导航”工具,根据网址不同,展示不同的 Vue 组件。
就像你在手机地图里:
- 输入 /home 👉 去首页
- 输入 /about 👉 去关于页
- 输入 /user/1 👉 去用户 1 的详情页
📝 基本用法
安装:
1 | npm install vue-router |
创建路由文件(router.js):
1 | import { createRouter, createWebHistory } from 'vue-router' |
在 Vue 入口文件 main.js 里使用:
1 | import { createApp } from 'vue' |
在页面里跳转:
1 | <template> |
📌 关键点记住:
- router-link = 超链接,用来跳转。
- router-view = 显示当前路由对应的页面。
- routes = 路由表,规定哪个路径显示哪个组件。
Prompt:嵌套路由
Response:
很好 👍 你已经理解 Vue Router 的基础了,现在我帮你讲 嵌套路由。
🌳 什么是嵌套路由?
- 简单来说:一个页面里面还有子页面。
- 就像一个大商场(父路由),里面有不同的店铺(子路由)。
- 在 Vue 里,父组件里面用
<router-view>再嵌套一个子路由。
📝 示例
比如我们有一个 用户中心(/user) 页面,里面有两个子页面:
/user/profile→ 用户资料/user/settings→ 用户设置
1. 定义路由
1 | import { createRouter, createWebHistory } from 'vue-router' |
2. 父组件 User.vue
1 | <template> |
3. 访问效果
- 访问
/user/profile👉 显示UserProfile - 访问
/user/settings👉 显示UserSettings - 外层始终是
User.vue,里面的<router-view>再切换子组件
📌 总结
- 父路由组件 里要有一个
<router-view>占位符,子路由会显示在里面。 - 子路由路径写的时候 **不要加斜杠
/**,否则会被当成根路径。
Prompt:vue代理配置
Response:
好问题 👍 你说的 Vue 代理配置,一般是指在 本地开发环境下,Vue 项目通过 代理(proxy) 转发 API 请求,解决 跨域问题。
🔍 为什么需要代理?
- 前端(Vue)通常运行在
http://localhost:8080 - 后端 API 可能在
http://localhost:8081或者其他域名 - 浏览器有 同源策略,直接请求会报 跨域错误
- 所以需要一个 代理服务器,把前端请求转发给后端,看起来像是同源的
📝 Vue2 (Vue CLI) 配置
在 vue.config.js 文件里写:
1 | module.exports = { |
👉 请求时:
1 | axios.get('/api/users') |
实际上会被代理到:
1 | http://localhost:8081/users |
📝 Vue3 (Vite) 配置
如果你用的是 Vite,就在 vite.config.js 里配置:
1 | import { defineConfig } from 'vite' |
👉 请求时:
1 | fetch('/api/users') |
实际上会去请求:
1 | http://localhost:8081/users |
📌 关键参数解释
- target:代理的目标地址(后端服务地址)
- changeOrigin:是否修改请求头里的
Origin,避免后端拒绝请求 - pathRewrite / rewrite:路径重写,把
/api/xxx变成/xxx
要不要我给你整理一份 Vue2 vs Vue3 代理配置对照表,这样你就能快速区分该用哪个配置了?
Prompt:elementplus表单校验步骤
1. 引入 Form 组件
Element Plus 的表单校验主要依赖 <el-form>、<el-form-item> 和 rules 规则。
1 | <template> |
2. 定义数据和校验规则
在 <script setup> 或普通 <script> 里写:
1 | import { reactive, ref } from 'vue' |
3. 提交时手动校验
调用 formRef.value.validate() 方法:
1 | const submitForm = () => { |
4. 重置表单
调用 resetFields 方法:
1 | const resetForm = () => { |
📌 总结步骤
- 用
<el-form>包裹表单,设置:model和:rules。 - 在
<el-form-item>上绑定prop,对应model里的字段。 - 在脚本里定义
rules(必填、格式、长度等)。 - 通过
validate方法进行校验,通过resetFields方法重置表单。
Prompt:后端请求格式是/depts?id=1,前端应该怎么写
Response:
明白啦 👍 你后端接口是这样:
1 | GET /depts?id=1 |
也就是通过 查询参数(query parameter) 传递 id。
🔹 如果你用 Axios
前端这样写:
1 | import axios from 'axios' |
👉 推荐 方式二,更清晰,Axios 会自动处理 ?id=1。
🔹 如果你用 Fetch API
1 | fetch('/depts?id=1') |
🔹 如果你用了 Vue Router 路由跳转带参数
1 | this.$router.push({ path: '/depts', query: { id: 1 } }) |
👉 最终地址会变成:
1 | /depts?id=1 |
📌 总结:
- 后端要求 /depts?id=1 → 前端就是 Query 参数请求
- Axios 推荐写法:
1 | axios.get('/depts', { params: { id: 1 } }) |
Prompt:
比如这里要怎么改export const deleteApi = (id) => {
return request.delete(/depts/${id})
}
Response:
👌 明白了,你现在的代码是 RESTful 风格,路径是:
1 | /depts/1 // 把 id 放在路径里面 |
但是你后端接口格式是:
1 | /depts?id=1 // 把 id 放在查询参数里 |
🔧 修改方式
只需要把 路径参数 改成 查询参数:
1 | export const deleteApi = (id) => { |
📌 对比
- 原来写法(RESTful):
1 | request.delete(`/depts/${id}`) |
请求地址:/depts/1
- 现在改法(Query 参数):
1 | request.delete('/depts', { params: { id } }) |
请求地址:/depts?id=1
Prompt:总结
- 选项式 API vs 组合式 API
- 选项式 API(Options API):代码按 功能类型 分类(data、methods…),简单直观,适合小项目。
- 组合式 API(Composition API):代码按 逻辑聚合,用
setup、ref、reactive,更灵活,适合大项目。
- Vue Router
- Vue 官方的路由管理器,用来在不同“页面”之间切换。
- 核心:
routes(路由表)、router-link(跳转)、router-view(显示页面)。 - 嵌套路由:父路由里再用
<router-view>,子路由会显示在里面。
- Vue 代理配置(解决跨域)
- Vue2 (CLI):在
vue.config.js里devServer.proxy配置。 - Vue3 (Vite):在
vite.config.js里server.proxy配置。 - 常用参数:
target(后端地址)、changeOrigin(修改请求源)、rewrite(路径重写)。
- Vue2 (CLI):在
- Element Plus 表单校验
- 用
<el-form>+rules配置校验规则。 formRef.validate()→ 提交时校验;formRef.resetFields()→ 重置表单。- 支持必填、长度、邮箱、正则等多种规则。
- 用
- Axios 请求参数写法
- Query 参数(/depts?id=1) →
1
axios.get('/depts', { params: { id: 1 } })
- RESTful 参数(/depts/1) →
1
axios.delete(`/depts/${id}`)
- 如果后端要求
/depts?id=1,就要用params。
- Query 参数(/depts?id=1) →
👉 总结一句:
- Vue 负责前端页面和组件逻辑(Options API / Composition API)。
- Vue Router 负责页面跳转(路由和嵌套路由)。
- 代理配置解决跨域问题。
- Element Plus 提供 UI 和表单校验。
- Axios 负责请求后端接口,不同参数写法要区分 query 和 path。


