【Vue3大事件 | 项目笔记】第六天

前言:Vue3大事件项目是一个基于Vue3的PC端项目,本系列文章我将总结我在这个项目中学到的知识点,写项目笔记。如果你正好在学或巩固Vue3,希望本系列文章可以帮助到你。

【Vue3大事件 | 项目笔记】第六天

今日完结:

  • 了解AI插件Copilot
  • 完成个人中心基本资料页面
  • 完成个人中心更换头像页面
  • 完成个人中心重置密码页面

今日收获:

1.利用 $el 模拟点击 el-upload 内部 input 实现文件选择触发

el-upload 组件默认是 "点击上传区域(比如预览图 / 占位框)" 触发文件选择弹窗,样式和触发区域固定(图中白色框)

就比如当我们点击白色框(对应代码<el-upload ref="uploadRef" :auto-upload="false"></el-upload>)的时候,就会进行图片的选择,而如果我们想要实现点击"选择图片"按钮也能实现相应的功能,我们就要利用 $el 模拟点击 el-upload 内部 input 实现文件选择触发,

javascript 复制代码
<script setup>
import { ref } from 'vue'
const uploadRef = ref(null)
</script>


<template>
  <el-upload ref="uploadRef" :auto-upload="false"></el-upload>
  <button @click="uploadRef.$el.querySelector('input').click()">选择图片</button>
</template>

Vue 模板引用(ref) :uploadRef 是通过 ref="uploadRef" 给 el-upload 组件绑定的模板引用,用于在代码中直接访问组件的 DOM 元素或实例。
**el 属性** : Vue 组件实例的 el 属性指向该组件渲染后对应的根 DOM 元素(即 el-upload 最终生成的 DOM 节点)。
DOM 操作(querySelector/click) :querySelector('input') 是原生 JS 方法,用于从 DOM 节点中查找匹配的子元素;click() 是原生 JS 方法,用于模拟鼠标点击事件。
自定义上传触发逻辑 :覆盖 el-upload 默认的触发方式(默认点击上传区域触发选择文件),改为通过自定义按钮触发,提升交互灵活性。

2.图片上传预览

用户选择本地图片后,我们不想要图片先上传到服务器,就能在页面上看到选中的图片效果,就可以用到FileReader + readAsDataURL 的组合方案。

javascript 复制代码
// 1. 创建FileReader实例:FileReader是浏览器提供的内置对象,专门用于异步读取本地文件内容
const reader = new FileReader()

// 2. 读取文件为DataURL格式(Base64编码):
// file.raw 是el-upload组件封装后返回的原生File对象(包含用户选择的本地图片的完整信息)
// readAsDataURL方法会将图片文件的二进制内容转换成 `data:image/png;base64,xxxx` 格式的字符串
reader.readAsDataURL(file.raw)

// 3. 监听文件读取完成事件:FileReader读取文件是异步操作,读取成功后触发onload回调
reader.onload = () => {
  // 把读取后的Base64字符串赋值给图片显示的src属性(imgUrl),实现本地图片即时预览
  imgUrl.value = reader.result
}

杂项知识点:

FileReader(Base64)与 URL.createObjectURL () 区别

在【Vue3大事件 | 项目笔记】第五天中我们也讲到了关于图片预览的知识(URL.createObjectURL () ),那和本次(FileReader(Base64))的有什么不同呢,以下是相关说明:


总结:

今天网上主要讲的是如何用ai辅助我们写代码,效率很快,但这个要建立在我们知识点都懂了的情况下,因为我们不能完全依赖ai,如果提示词给的不全,ai有很多时候会修改我们已经完成的代码,有时甚至会返回一个错误代码。总的下来,做这个项目对我的收获很大,认识了Element组件库,AI插件Copilot,很多优化项目的方法等等,希望你通过我的这系列文章也有所收获,感谢你的阅读。

如果我的内容对你有帮助,请点赞,评论,收藏。创作不易,大家的支持就是我坚持下去的动力!

相关推荐
Zhao-Jichao2 小时前
AI Prompting for Everyone 课程笔记 - P21 总结 Conclusion
人工智能·笔记
欢欢李2 小时前
【LTE L3 笔记 05】LTE同步信号
笔记·无线通信·物理层·lte·空口协议
ruanno_top3 小时前
倒计时该用 deadline 还是每秒减一?我把两种写法都跑了一遍
vue.js
La Pulga3 小时前
【FreeRTOS源码学习笔记】空闲任务与阻塞延时
笔记·mcu·学习·嵌入式·freertos·实时操作系统
蒸蒸yyyyzwd3 小时前
秋招学习笔记 day106
笔记·学习
小李不想当小白5 小时前
WDG看门狗(STM32标准库学习笔记)
笔记·stm32·单片机·嵌入式硬件·学习·嵌入式
欢欢李5 小时前
【LTE L3 笔记 04】LTE帧结构
笔记·无线通信·物理层·lte·空口协议
徐小夕7 小时前
下载量超 30 万的开源智能体 Prime Agent:它把自己从 TypeScript 重写成了 Rust
前端·vue.js·github
Zhao-Jichao7 小时前
AI Prompting for Everyone 课程笔记 - P20 实验与期末项目 Lab and Final Project
前端·人工智能·笔记
toooooop88 小时前
CRMEB 故障排查笔记:安全网关只放行 GET/POST 怎么办
前端·javascript·vue.js·thinkphp6·crmeb