初始前端2

简介: 本文介绍了前端开发中的几个关键技术点,包括使用`layout->router->view`结构实现页面渲染、利用`ref`定义动态响应模型、通过`axios`及`el-upload`实现文件上传、以及使用`localStorage`进行数据持久化存储等内容。重点解析了各组件间的数据传递、异步请求处理、前后端数据格式适配及数据序列化/反序列化操作,帮助开发者更好地理解前后端交互及组件协作机制。

layout->router->view (layout中使用index连接router中的文件路径,使用view指明渲染位置,而不是指明要渲染的文件,在路径router中已经指明了需要渲染的文件

ref定义的动态响应模型可以动态追加属性

liru:    const a= rfe({   name:'', job:''})

那么在外围可以动态添加属性,即时:a.value.time=time是正确的,动态追加(作用范围呢)

正常的请求(通过axios异步请求)

要编写对应的代理文件,根据路径判断是走前端还是后端

1.在api文件中的对应的.js文件中写入(本质上就是到处结果)

语法:export const 方法名(形参)=>request.请求方式(请求路径,参数)

export const addApi(emp)=>request.post('/emps',emp)

2.在对应的的.vue文件中导入,在需要使用时直接调用结果 const result= await addApi(参数) 要在外围方法上加async,可以根据结果掉用其中的 code msg data等属性(返回值属性)

2.el-upload(原生的异步请求,不用手动导入,可直接调用结果,服务器返回的数据作为第一个参数传递给该回调。)

el-upload 组件通过原生 XHR 实现文件上传,并自动处理服务器响应。当上传成功时,会将服务器返回的数据直接传递给 on-success 回调函数,你可以在回调中处理这些数据(如更新 Vue 响应式对象)。这种方式无需手动编写 XHR 代码,也不需要引入 axios,简化了文件上传的实现。

虽然 axios 更常用,但 el-upload 组件内置了 XHR 实现,无需额外依赖。两者的核心区别:

特性

el-upload(原生 XHR)

axios

是否需要额外引入

响应处理方式

通过回调函数(on-success)

通过 Promise.then () 或 async/await

数据格式

自动解析 JSON

需手动处理(response.data)

自定义请求头

通过 headers 属性配置

通过 config 对象配置

进度监听

支持(on-progress 回调)

支持(onUploadProgress)

通过返回参数赋值到前端,进行展示

为什么必须用date[]数组?(前端中间件要求,

date是个过渡性质,前端:date数组,后端:begin, end)

date[]数组是为了适配前端组件的特性,而beginend是为了适配后端的数据格式。通过 “数组→拆分→合并” 的流程,实现了前后端和组件的无缝衔接。如果直接使用beginend,会导致el-date-picker无法正常工作(因为组件不支持分别绑定两个字段)。

场景

需求

解决方案

前端选择日期

el-date-picker

(daterange)要求用数组绑定

使用date[]

数组作为v-model

提交数据到后端

后端需要begin

end

独立字段

date[]

拆分为begin

end

从后端回显数据

后端返回begin

end

独立字段

begin

end

合并为date[]

数组

前端监听,拆分(因为前端接受的是date数组,传回后端要拆分)
watch(
  () => employee.value.exprList,
  (newValue) => {
    employee.value.exprList.forEach((expr) => {
      if (expr.date && expr.date.length) {
        expr.begin = expr.date[0];  // 数组第一项赋值给begin
        expr.end = expr.date[1];    // 数组第二项赋值给end
      }
    });
  },
  { deep: true }
);
//从后端获取数据时,date时为null的要把,begin 与end组装到date
// 编辑回显时,将后端的begin和end合并为date数组
employee.value.exprList.forEach((expr) => {
  expr.date = [expr.begin, expr.end];  // 合并为数组,供组件绑定
});

为什么使用 localStorage要强转化为string(序列化与反序列化),其他正常操作,在内存上

操作场景

是否需要 JSON 转换?

示例代码

内存中读取对象属性

不需要

console.log(result.data.name)

内存中修改对象属性

不需要

result.data.name = "李四"

存入 localStorage

必须用JSON.stringify()

localStorage.setItem("user", JSON.stringify(result.data))

从 localStorage 读取

必须用JSON.parse()

const user = JSON.parse(localStorage.getItem("user"))

  1. 数据类型限制
  • localStorage 只能存字符串,无法直接存储对象、数组、函数等。
  • JSON.stringify()会忽略对象中的函数undefinedSymbol等无法序列化的属性。
  • 内存操作:直接读写对象,无需转换。
  • localStorage 操作存时序列化(JSON.stringify()),读时反序列化(JSON.parse())。

总结:内存操作就像是在草稿纸上记录东西,操作灵活但数据容易丢失;而localStorage持久化存储则像是把信息写在笔记本上,数据可以长期保存,但存储和读取时需要遵循特定的格式要求。

对于复杂的数据结构,在存储到localStorage时一定要先进行 JSON 序列化,读取后再进行反序列化。这样才能保证数据的完整性,避免出现数据丢失或者无法正确解析的问题。

相关文章
|
4月前
|
Java
初识线程
在 Java 多线程编程中,线程对象名与线程名称是两个不同概念。对象名是代码中引用线程对象的变量名,如 `t1`,而线程名称是线程实例在 JVM 中的标识,可通过 `setName()` 或构造函数设置。若不显式设置,Java 会分配默认名称如 `Thread-0`。通过 `Thread.currentThread().getName()` 可获取当前执行线程的名称。
|
4月前
|
存储 前端开发 JavaScript
初始前端3
本文介绍了前端开发中的表单交互设计与数据绑定技巧,包括按钮点击事件处理、表单模型与实例的创建及使用、单向与双向数据绑定的区别与应用,以及表格数据展示等内容,适用于 Vue 框架下的 Element UI 组件实践。
|
4月前
|
存储 JavaScript 前端开发
初始前端1
本文介绍了 Vue 组合式开发中使用 `ref` 实现响应式数据的方法,强调不依赖 `this`。内容包括创建 `.vue` 文件的模板结构、使用 `ref` 定义响应式变量(如 `count2.value`)与非响应式变量(如 `count3`)的区别,以及如何在模板中绑定数据。同时通过表格对比了 `ref` 在 JavaScript 和模板中的使用方式,指出在 JS 中需用 `.value` 操作数据,而在模板中可直接访问。最后以生活化的类比解释 `ref` 的作用,帮助开发者更好地理解响应式原理。
|
5月前
|
存储 JavaScript 前端开发
前端实现动态路由vue
该代码实现了Vue动态路由功能,包含基础路由配置、路由守卫、动态添加路由及登录认证。用户登录成功后,将动态加载仪表盘路由组件,实现按需加载。
160 0
|
机器学习/深度学习 JSON 物联网
ChatGLM-6B 部署与 P-Tuning 微调实战
自从 ChatGPT 爆火以来,树先生一直琢磨想打造一个垂直领域的 LLM 专属模型,但学习文本大模型的技术原理,从头打造一个 LLM 模型难度极大。。。
3176 1
|
4月前
|
负载均衡 网络性能优化
了解EMQ
EMQ通过MQTT协议的QoS机制保障消息可靠传输,支持QoS 0、1、2三个等级,分别实现消息最多一次、至少一次和恰好一次传递。对于延迟消息,EMQ X支持通过特殊主题前缀`$delayed/{DelayInterval}`实现延迟发布。点对点通信可通过不带群组的共享订阅(如`$queue/t/1`)实现,结合负载均衡策略如随机、轮询等,确保消息仅由一个订阅者接收;发布订阅模式则通过带群组的共享订阅(如`$share/组名称/t/1`)实现,确保每组一个订阅者收取消息。
|
4月前
|
负载均衡 Java Nacos
微服务架构中的服务注册与发现流程
本内容介绍了微服务架构中的服务注册与发现流程,包括服务注册中心(如Nacos)、服务提供者和调用者的角色分工。服务启动时自动注册信息至注册中心,调用者通过客户端负载均衡(如Spring Cloud Loadbalancer)选取服务实例进行远程调用。同时,内容还讲解了OpenFeign的工作原理,其作为HTTP客户端集成负载均衡,通过接口定义、代理生成、请求发送与结果解析,实现服务间的高效通信。
|
自然语言处理 IDE JavaScript
Fitten Code
【8月更文挑战第30天】
669 4
|
编解码 前端开发 开发者
构建响应式Web界面:现代前端开发的最佳实践
【2月更文挑战第16天】 在多设备浏览时代,为不同屏幕尺寸和分辨率构建兼容的Web界面成为前端开发者的核心挑战。本文深入探讨了响应式设计的理念、关键技术和最佳实践,旨在指导开发者通过灵活布局、媒体查询、弹性图片等技术手段,实现流畅的用户体验。通过分析真实案例,本文将提供一套行之有效的方法论,帮助前端工程师高效地构建和维护响应式Web项目。
276 2