初始前端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月前
|
存储 JavaScript 前端开发
初始前端1
本文介绍了 Vue 组合式开发中使用 `ref` 实现响应式数据的方法,强调不依赖 `this`。内容包括创建 `.vue` 文件的模板结构、使用 `ref` 定义响应式变量(如 `count2.value`)与非响应式变量(如 `count3`)的区别,以及如何在模板中绑定数据。同时通过表格对比了 `ref` 在 JavaScript 和模板中的使用方式,指出在 JS 中需用 `.value` 操作数据,而在模板中可直接访问。最后以生活化的类比解释 `ref` 的作用,帮助开发者更好地理解响应式原理。
|
4月前
|
Java
初识线程
在 Java 多线程编程中,线程对象名与线程名称是两个不同概念。对象名是代码中引用线程对象的变量名,如 `t1`,而线程名称是线程实例在 JVM 中的标识,可通过 `setName()` 或构造函数设置。若不显式设置,Java 会分配默认名称如 `Thread-0`。通过 `Thread.currentThread().getName()` 可获取当前执行线程的名称。
|
4月前
|
存储 前端开发 JavaScript
初始前端3
本文介绍了前端开发中的表单交互设计与数据绑定技巧,包括按钮点击事件处理、表单模型与实例的创建及使用、单向与双向数据绑定的区别与应用,以及表格数据展示等内容,适用于 Vue 框架下的 Element UI 组件实践。
|
5月前
|
存储 JavaScript 前端开发
前端实现动态路由vue
该代码实现了Vue动态路由功能,包含基础路由配置、路由守卫、动态添加路由及登录认证。用户登录成功后,将动态加载仪表盘路由组件,实现按需加载。
169 0
|
机器学习/深度学习 JSON 物联网
ChatGLM-6B 部署与 P-Tuning 微调实战
自从 ChatGPT 爆火以来,树先生一直琢磨想打造一个垂直领域的 LLM 专属模型,但学习文本大模型的技术原理,从头打造一个 LLM 模型难度极大。。。
3181 1
|
4月前
|
存储 算法 Sentinel
熔断降级
本内容介绍了微服务中熔断降级的实现原理及Sentinel的底层机制。通过OpenFeign集成Sentinel,利用断路器统计异常和慢请求比例,触发熔断并降级,提升系统稳定性。还讲解了Sentinel使用的限流算法,如滑动窗口、令牌桶和漏桶算法,以应对不同场景下的流量控制需求。
|
4月前
|
SQL Java 数据库连接
事务的七种传播行为及其应用场景
本文介绍了事务的七种传播行为及其应用场景,包括 PROPAGATION_REQUIRED、PROPAGATION_SUPPORTS、PROPAGATION_REQUIRES_NEW 等,帮助开发者理解事务管理机制。同时讲解了 Java 中 SQL 操作与对象数据不同步的问题,强调重新查询与手动管理的必要性,并说明 MyBatis 批量操作的最佳实践。
|
自然语言处理 IDE JavaScript
Fitten Code
【8月更文挑战第30天】
707 4
|
编解码 前端开发 开发者
构建响应式Web界面:现代前端开发的最佳实践
【2月更文挑战第16天】 在多设备浏览时代,为不同屏幕尺寸和分辨率构建兼容的Web界面成为前端开发者的核心挑战。本文深入探讨了响应式设计的理念、关键技术和最佳实践,旨在指导开发者通过灵活布局、媒体查询、弹性图片等技术手段,实现流畅的用户体验。通过分析真实案例,本文将提供一套行之有效的方法论,帮助前端工程师高效地构建和维护响应式Web项目。
282 2