前端开发中的模拟后端与MVVM架构实践[特殊字符][特殊字符][特殊字符]

news2025/1/23 14:58:01

平时,后端可能不能及时给接口给前端进行数据调用和读取。这时候,前端想到进行模拟后端接口。本文将介绍如何通过vite-plugin-mock插件模拟后端接口,并探讨MVVM架构在前端开发中的应用。此外,我们还将讨论Vue2与Vue3的区别,以及如何处理动态路由和登录鉴权等常见问题。

一、模拟后端接口

通过模拟接口,前端开发者可以在不依赖后端的情况下进行开发和调试。

1. 使用 vite-plugin-mock 插件

vite-plugin-mock 是一个用于Vite项目的插件,可以帮助我们快速创建模拟接口。以下是使用步骤:

  1. 安装插件

    npm i vite-plugin-mock -D
    
  2. vite.config.js 中配置

    import { defineConfig } from 'vite';
    import vue from '@vitejs/plugin-vue';
    import { viteMockServe } from 'vite-plugin-mock';
    
    export default defineConfig({
      plugins: [
        vue(),
        viteMockServe({
          mockPath: 'mock', // 指定mock文件存放的目录
          localEnabled: true, // 开发环境启用mock
        }),
      ],
    });
    
  3. 创建模拟接口
    在项目根目录下创建 mock 文件夹,并在其中创建 user.js 文件:

    export default [
      {
        url: '/api/login',
        method: 'post',
        response: () => {
          return {
            code: 200,
            message: 'success',
            data: {
              token: 'mock-token',
            },
          };
        },
      },
    ];
    

通过以上步骤,我们可以在开发环境中使用 /api/login 接口进行登录模拟。
在这里插入图片描述

二、MVVM架构

MVVM(Model-View-ViewModel)是一种前端架构模式,它将应用程序分为三个部分:Model、View 和 ViewModel。

1. MVVM 的核心概念

  • Model:数据模型,负责处理数据逻辑,通常包括从后端获取数据的部分(如Axios请求)。
  • View:视图层,负责展示数据和用户界面。
  • ViewModel:连接View和Model的桥梁,负责生成和维护视图与数据层的关系。它将视图的状态和行为封装在其中,使得View和Model之间的耦合度降低。

2. MVVM 的优势

  • 低耦合:MVVM架构使得View、Model和ViewModel之间的关联性减弱,各自独立,互不影响。
  • 分层开发:通过分层开发,开发者可以更好地组织代码,提高代码的可维护性和可扩展性。
    在这里插入图片描述

三、Vue2 与 Vue3 的区别

Vue3 是 Vue2 的升级版本,带来了许多新特性和改进。以下是两者之间的主要区别:

1. 双向绑定原理

  • Vue2:使用 Object.defineProperty() 实现双向绑定。这种方式在后续更新属性时无法劫持,导致数据更新时视图不更新。
  • Vue3:使用 Proxy 实现双向绑定。Proxy 可以劫持后续更新的数据,确保数据更新时视图同步更新。

2. $set 方法

  • Vue2:使用 this.$set 来动态添加响应式属性。
  • Vue3:不再需要 $set 方法,直接使用 refreactive 即可。

3. 生命周期

  • Vue2beforeCreate, created, beforeMount, mounted, beforeUpdate, updated, beforeDestroy, destroyed, activated, deactivated
  • Vue3setup, onBeforeMount, onMounted, onBeforeUpdate, onUpdated, onBeforeUnmount, onUnmounted

4. 父子组件通信

  • Vue2
    • 父传子:通过 props
    • 子传父:通过 this.$emit("事件", 参数)
  • Vue3
    • 父传子:通过 props
    • 子传父:通过 defineEmits(['事件名称'])

5. API 风格

  • Vue2:选项式API,将不同的属性(如 data, methods)分开定义。
  • Vue3:组合式API,允许将相关逻辑组织在一起,提高代码的可读性和可维护性。

6. 多根节点支持

  • Vue2:只支持单根节点。
  • Vue3:支持多根节点。

7. 数据定义

  • Vue2:在 data() 中定义数据。
  • Vue3:使用 refreactive 定义数据。

四、动态路由与登录鉴权

在后台管理系统中,动态路由和登录鉴权是常见的需求。以下是处理这些问题的常见方法:

1. 动态路由

动态路由可以根据用户的权限动态加载路由。常见的实现方式是通过 addRoute 方法动态添加路由。

  • 问题:刷新页面后,动态路由会丢失。
  • 解决方案:将路由信息存储在 localStoragesessionStorage 中,页面刷新时重新加载路由。

2. 登录鉴权

登录鉴权是确保用户访问权限的重要环节。常见的实现方式包括:

  • Token 验证:用户登录后,后端返回一个Token,前端将其存储在 localStoragecookie 中,每次请求时携带该Token进行验证。
  • 路由守卫:在路由跳转前,通过路由守卫检查用户是否已登录,未登录则跳转到登录页面。

五、项目实践

在一个使用 Vue3 + Vite + Element Plus + Pinia + Apifox 的后台管理项目中,可能会遇到以下问题:

1. 首页加载慢

  • 解决方案:使用虚拟长列表和分段加载技术,减少一次性加载的数据量,提高页面加载效率。

2. 安全性

  • 解决方案:确保Token的安全性,避免XSS攻击,使用HTTPS加密传输数据。

六、总结

通过 vite-plugin-mock 插件,我们可以轻松模拟后端接口,加快前端开发进度。MVVM架构帮助我们更好地组织代码,降低耦合度,提高代码的可维护性。Vue3 带来了许多新特性,如 Proxy 双向绑定、组合式API等,使得开发更加高效。动态路由和登录鉴权是后台管理系统中常见的需求,合理处理这些问题可以提升用户体验和系统安全性。

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

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

相关文章

【Tool】沉浸式翻译 DeepLX

效果对比 对比一下四个常用的翻译工具的效果 不难看出只有Deepl算是在讲人话 如何配置 DeepLX 安装沉浸式翻译插件 获取APIKEY 从这获取: https://linux.do/t/topic/111737 配置 参考官方教程: https://linux.do/t/topic/111911

登录认证(3):会话跟踪技术:Session

Session概览 上文提到了,为了在同一个会话中共享数据(比如用户的登录状态),我们需要使用会话跟踪技术,Cookie是客户端的会话跟踪技术,是存储在本地浏览器中的。而本文介绍另外一种会话跟踪技术Session&…

2024年博客之星年度评选|第一步——创作影响力评审入围Top300名单 | 博客之星陪跑指南

2024年博客之星年度评选|第一步——创作影响力评审入围Top300名单 | 博客之星陪跑指南 2024年博客之星年度评选正在如火如荼地进行中!作为博客圈最具影响力的评选活动之一,今年的评选吸引了众多优秀博主的参与。现在,距离Top300入…

ui文件转py程序的工具

源博客连接: PyCharm中利用外部工具uic转成的py文件,里面全是C代码,并非python类型的代码,导致大量报错。。。_pyside6-uic为什么把ui转为了c-CSDN博客 如果想把ui文件转为py文件,首先设置pycharm的外部工具&#xf…

【喜讯】海云安荣获“数字安全产业贡献奖”

近日,国内领先的数字化领域独立第三方调研咨询机构数世咨询主办的“2025数字安全市场年度大会”在北京成功举办。在此次大会上,海云安的高敏捷信创白盒产品凭借其在AI大模型技术方面的卓越贡献和突出的技术创新能力,荣获了“数字安全产业贡献…

FluentCMS:基于 ASP.NET Core 和 Blazor 技术构建的开源CMS内容管理系统

推荐一个基于 ASP.NET Core 和 Blazor 技术构建的、功能完善的开源CMS内容管理系统。 01 项目简介 FluentCMS 是一个基于强大的 ASP.NET Core 和创新的 Blazor 技术构建的现代内容管理系统(CMS)。 FluentCMS 设计为快速、灵活且用户友好,它…

Java实现简易银行账户管理系统

目录 1、项目概述 1.1 项目结构 1.2 技术栈 2、核心功能说明 2.1 账户管理 2.2 异常处理体系 3、设计理念解析 3.1 面向对象设计 3.2 关键设计点 4、使用指南 4.1 运行流程 4.2 注意事项 5、扩展建议 5.1增加功能 5.2优化方向 6、主要的功能模块代码说明 6.1exception 6.2main …

深度学习系列75:sql大模型工具vanna

1. 概述 vanna是一个可以将自然语言转为sql的工具。简单的demo如下: !pip install vanna import vanna from vanna.remote import VannaDefault vn VannaDefault(modelchinook, api_keyvanna.get_api_key(my-emailexample.com)) vn.connect_to_sqlite(https://va…

C# 网络协议第三方库Protobuf的使用

为什么要使用二进制数据 通常我们写一个简单的网络通讯软件可能使用的最多的是字符串类型,比较简单,例如发送格式为(head)19|Msg:Heart|100,x,y,z…,在接收端会解析收到的socket数据。 这样通常是完全可行的,但是随着数据量变大&…

网络安全 | 什么是正向代理和反向代理?

关注:CodingTechWork 引言 在现代网络架构中,代理服务器扮演着重要的角色。它们在客户端和服务器之间充当中介,帮助管理、保护和优化数据流。根据代理的工作方向和用途,代理服务器可分为正向代理和反向代理。本文将深入探讨这两种…

Python 预训练:打通视觉与大语言模型应用壁垒——Python预训练视觉和大语言模型

大语言模型是一种由包含数百亿甚至更多参数的深度神经网络构建的语言模型,通常使用自监督学习方法通过大量无标签文本进行训练,是深度学习之后的又一大人工智能技术革命。 大语言模型的发展主要经历了基础模型阶段(2018 年到2021年)、能力探索阶段(2019年…

AIGC视频生成模型:Meta的Emu Video模型

大家好,这里是好评笔记,公主号:Goodnote,专栏文章私信限时Free。本文详细介绍Meta的视频生成模型Emu Video,作为Meta发布的第二款视频生成模型,在视频生成领域发挥关键作用。 🌺优质专栏回顾&am…

定位,用最通俗易懂的方法2.1:CRLB实例

二郎就不设置什么VIP可见啥的了,这样大家都能看到。 如果觉得受益,可以给予一些打赏,也算对原创的一些鼓励,谢谢。 钱的用途:1)布施给他人;2)二郎会有更多空闲时间写教程 起因&…

python学习笔记3-字符串常用的方法

一、判断(9个): 二、查找和替换(8个) 三、⼤⼩写转换(5个) 四、⽂本对⻬(3个) 五、去除空⽩字符(3个) 六、拆分和连接 (6个&#xff0…

【FreeRTOS 教程 一】任务结构体及其基础创建使用

目录 一、任务与协程的区别: (1)任务的特点: (2)协程的特点: (3)总结: 二、任务概述 : (1)任务状态: &…

node.js 07.npm下包慢的问题与nrm的使用

一.npm下包慢 因为npm i 默认从npm官网服务器进行下包,但是npm官网服务器是海外服务器所以响应很慢. 于是我们通过npm下包的时候通常用淘宝镜像进行下包,下面是切换到淘宝镜像地址下包的操作. 二.nrm的使用 nrm是一个管理切换npm下包地址的工具,可以快速切换下包的地址. 安…

2025发文新方向:AI+量化 人工智能与金融完美融合!

2025深度学习发论文&模型涨点之——AI量化 人工智能的融入,使量化交易实现了质的突破。借助机器学习、深度学习等先进技术,人工智能可高效处理并剖析海量市场数据,挖掘出数据背后错综复杂的模式与趋势,从而不仅提升了数据分析…

【16届蓝桥杯寒假刷题营】第1期DAY5

5.依依的询问最小值 - 蓝桥云课 问题描述 依依有个长度为 n 的序列 a,下标从 1 开始。 她有 m 次查询操作,每次她会查询下标区间在 [li​,ri​] 的 a 中元素和。她想知道你可以重新排序序列 a,使得这 m 次查询的总和最小。 求你求出 m 次…

25/1/15 嵌入式笔记 初学STM32F108

GPIO初始化函数 GPIO_Ini:初始化GPIO引脚的模式,速度和引脚号 GPIO_Init(GPIOA, &GPIO_InitStruct); // 初始化GPIOA的引脚0 GPIO输出控制函数 GPIO_SetBits:将指定的GPIO引脚设置为高电平 GPIO_SetBits(GPIOA, GPIO_Pin_0); // 将GPIO…

C语言--数据在内存中的存储

数据在内存中的存储 主要研究整型和浮点型在内存中的存储。 1. 整数在内存中的存储 在学习操作符的时候,就了解过了下面的内容: 整数的2进制表示方法有三种,即原码、反码和补码。 有符号的整数,三种表示方法均有符号位和数值…