初始前端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[]数组是为了适配前端组件的特性,而begin和end是为了适配后端的数据格式。通过 “数组→拆分→合并” 的流程,实现了前后端和组件的无缝衔接。如果直接使用begin和end,会导致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()会忽略对象中的函数、undefined、Symbol等无法序列化的属性。
  • 内存操作:直接读写对象,无需转换。
  • localStorage 操作:存时序列化(JSON.stringify()),读时反序列化(JSON.parse())。

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

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

相关文章
|
算法 C语言 C++
嵌入式PID算法理论+实践分析
嵌入式PID算法理论+实践分析
989 0
|
网络协议 Linux 应用服务中间件
kali的常用命令汇总Linux
kali的常用命令汇总linux
1952 7
|
人工智能 监控 大数据
AR眼镜在警务安防的应用方案
针对当前社会治安防控难题,基于阿法龙XR云平台打造的云眼AI警务模块,融合AR与AI技术,构建“感知-分析-指挥-执行”一体化防控体系。通过AR智能眼镜实现人脸识别、车牌识别、人证比对、远程调度、执法记录等功能,提升执法效率与智能化水平,助力警务模式转型升级。
|
自然语言处理 IDE JavaScript
Fitten Code
【8月更文挑战第30天】
1187 4
|
前端开发 Java 编译器
classpath中存在多个jar存在同限定名的class classloader会如何加载
总之,合理组织类路径和使用现代化的构建工具,可有效避免类加载冲突,保证应用的稳定运行。
766 8
|
Android开发 Kotlin
Android面试题 之 Kotlin DataBinding 图片加载和绑定RecyclerView
本文介绍了如何在Android中使用DataBinding和BindingAdapter。示例展示了如何创建`MyBindingAdapter`,包含一个`setImage`方法来设置ImageView的图片。布局文件使用`<data>`标签定义变量,并通过`app:image`调用BindingAdapter。在Activity中设置变量值传递给Adapter处理。此外,还展示了如何在RecyclerView的Adapter中使用DataBinding,如`MyAdapter`,在子布局`item.xml`中绑定User对象到视图。关注公众号AntDream阅读更多内容。
441 1
|
Java API 容器
Java8函数式编程接口:Consumer、Supplier、Function、Predicate
Java8函数式编程接口:Consumer、Supplier、Function、Predicate
1286 1
|
机器学习/深度学习 数据采集 大数据
大数据技术下的企业智能决策支持系统
大数据技术下的企业智能决策支持系统
757 0
|
数据库 网络架构 UED
支付设计白皮书:支付系统的路由系统设计
支付设计白皮书:支付系统的路由系统设计
962 1

热门文章

最新文章