黑马头条vue2.0项目实战(九)——编辑用户资料

news2024/11/14 20:46:49

目录

1. 创建组件并配置路由

2. 页面布局

3. 展示用户信息

4. 修改昵称

5. 修改性别

6. 修改生日

7. 修改头像

7.1 图片上传预览

7.2 使用纯客户端的方式处理用户头像上传预览

7.3 头像裁切

7.4 纯客户端的图片裁切上传流程

7.5 Cropper.js 图片裁剪器的基本使用

7.6 裁剪头像上传


​​​​​​​

1. 创建组件并配置路由

① 创建 views/user-profile/index.vue

② 将该页面配置到根路由

2. 页面布局

  • 头部导航栏
    • nav-bar组件

  • 头像
    • van-cell
      • is-link是否展示右侧箭头并开启点击反馈
    • van-image

  • 昵称

    • van-cell

  • 性别

    • van-cell

  • 生日

    • van-cell

3. 展示用户信息

  • 思路:
    • 找到数据接口
    • 封装请求方法
    • 请求获取数据
    • 模板绑定

① 在 api/user.js 中添加封装数据接口

② 在 views/user-profile/index.vue 组件中请求获取数据

③ 模板绑定

4. 修改昵称

① 准备弹出层

  • 弹出层是懒渲染,就是相当于元素的显示与隐藏,所以使用 v-if 条件渲染的方式绑定,使得弹出层组件实现条件渲染。

② 封装组件

③ 页面布局

④ 基本功能处理

  • 封装更改用户个人资料接口

⑤ 更新完成

5. 修改性别

① 准备弹出层

② 封装组件

③ 页面布局

  • Vant 2 - Mobile UI Components built on VuePicker 选择器:Vant 2 - Mobile UI Components built on Vue
  •  Picker 组件通过 columns 属性配置选项数据,columns 是一个包含字符串或对象的数组。
  • 设置 show-toolbar 属性后会展示顶部操作栏,顶部栏包含标题、确认按钮和取消按钮,点击确认按钮触发 confirm 事件,点击取消按钮触发 cancel 事件。  

  • 单列选择时,可以通过 default-index 属性设置初始选中项的索引。

  • change 选项改变时触发

    • 单列:Picker 实例,选中值,选中值对应的索引。

    • 多列:所有列选中值,所有列选中值对应的索引

④ 基本功能处理

⑤ 更新完成

6. 修改生日

① 准备弹出层

② 封装组件

③ 页面布局

  • DatetimePicker 通过 type 属性来定义需要选择的时间类型, type 为 date 表示选择年月日。

  • 通过 min-date 和 max-date 属性可以确定可选的时间范围。

④ 基本功能处理

⑤ 更新完成

  • dayjs的使用与配置参考黑马头条vue2.0项目实战(四)——首页—文章列表——4.5 处理相对时间

7. 修改头像

7.1 图片上传预览

  • 方式一:结合服务器的图片上传预览

  • 方式二:纯客户端实现上传图片预览
    • const file = fileInput.files[0]        // 获取文文件对象

    • img.src = window.URL.createObjectURL(file)        // 设置图片的 src

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>客户端图片上传预览示例</title>
  <style>
    .img-wrap {
      width: 200px;
      height: 200px;
      border: 1px solid #ccc;
    }

    img {
      max-width: 100%;
    }
  </style>
</head>
<body>
  <h1>客户端图片上传预览示例</h1>
  <div class="img-wrap">
    <img src="" alt="" id="img">
  </div>
  <br>
  <input type="file" id="file" onchange="onFileChange()">
  <script>
    const img = document.querySelector('#img')
    const file = document.querySelector('#file')

    function onFileChange() {
      // 得到 file-input 的文件对象
      const fileObj = file.files[0]
      const data = window.URL.createObjectURL(fileObj)
      img.src = data
    }
  </script>
</body>
</html>

接下来就是在项目中使用纯客户端的方式处理用户头像上传预览

7.2 使用纯客户端的方式处理用户头像上传预览

在组件中:views/user-profile/index.vue

① 增加图片上传输入框,input 输入框自带的隐藏元素的方式,hidden 类似于 display: none。

② 点击头像单元格时,触发文件提交输入框。

  • 给头像单元格注册点击事件,点击头像单元格的时候,相当于点击了文件输入框。

  • 具体做法在单元格点击事件里拿到文件输入框的 dom,并且注册点击事件。($refs.file.click())

③ 给文件输入框注册 change 事件,拿到输入框输入的文件。

  • this.$refs.file:通过 Vue.js 的 $refs 获取到页面上定义的 <input type="file"> 元素。

  • this.$refs.file.files:返回一个 FileList 对象,包含了用户在文件输入框中选择的所有文件。

  • 即使只选择一个文件,它也是一个数组形式的对象。

  •  file 变量就是这个文件对象,它包含了文件的各种属性和信息,如文件名、类型、大小等。

④ 为选中的文件创建一个临时的、本地的 URL,以便在页面上可以直接预览或访问这个文件,而不需要立即上传到服务器。

  • window.URL.createObjectURL(file):使用浏览器的 URL.createObjectURL() 方法,为传入的 file 对象(即用户选择的文件)生成一个本地的临时 URL。

  • 这个 URL 是一个字符串,指向本地的文件资源。

  • 例如:blob:http://localhost:8080/4e97a5f3-8a16-4a13-8d08-7e0c5571f1d8。

  • blob: URL 可以直接用作 HTML 标签(如 <img>、<video>、<audio> 等)的 src 属性,无需进一步处理。

  • blob: URL 是由 window.URL.createObjectURL() 生成的本地 URL,它能够指向内存中的文件或二进制数据,因此可以直接用于展示文件内容。

⑤ file-input 如果两次同时选了同一个文件,那么就不会触发 change 事件。

  • 解决方法: 每次输入完毕之后,把文件输入框的 value 值清空

参考文档:

  •    <input type="file">

  • 在 web 应用程序中使用文件        

7.3 头像裁切

  • 方案一:结合服务端的图片裁切上传流程

  • 方案二:纯客户端的图片裁切上传流程

接下来就是在项目中使用纯客户端的方式裁剪上传头像

7.4 纯客户端的图片裁切上传流程

① 准备修改用户头像弹出层

② 封装组件

③ 页面布局

7.5 Cropper.js 图片裁剪器的基本使用

 Cropper.js——JavaScript 图像裁剪器的使用

  • 如果是基于服务端的裁切,则使用:getData 方法,该方法得到裁切的区域参数。
  • 如果是纯客户端的图片裁切,则使用:getCroppedCanvas 方法,该方法得到裁切之后的图片对象(类似于URL.createObjectURL 方法得到的文件对象)。

 官方文档

  • 安装: npm install cropperjs

  • 用法:

    • 用块元素(容器)包裹图像或画布元素

    • 确保图像的大小完全适合容器

    • 导入

      import 'cropperjs/dist/cropper.css';
      import Cropper from 'cropperjs';
    • 获取图片对象
      • 在 mounted 生命周期里
    • 实例化裁剪器
      • 配置参数

③ 将裁剪后的图像上传到服务器

7.6 裁剪头像上传

  • 步骤:
    • 封装接口
    • 请求提交
    • 更新视图

① 在 api/user.js 中添加封装数据接口

② 请求头参数问题

  • 如果接口要求的请求头 Header 为 Content-Type: multipart/form-data 则必须传递一个  FormData 对象

  • 如果接口要求的请求头 Header 为 Content-Type: application/json 则传递的是一个普通 js 对象(默认方式)

③ 裁剪头像配置

  • 下载安装 croppe.js:npm install cropperjs
  • 导入

  • 用块元素(容器)包裹图像或画布元素,确保图像的大小完全适合容器

  • 在 mounted 生命周期里获取图片对象,实例化裁剪器并自行配置截图区域参数

④ 提交裁剪之后的用户头像

  • getData方法得到了裁剪之后图片的对象参数,让后将这个对象传递给服务端,让服务端对原图进行裁切

  • 客户端进行对图片进行裁切,使用 getCroppedCanvas 方法,该方法得到裁切之后的图片对象(类似于URL.createObjectURL 方法得到的文件对象)

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

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

相关文章

盘点.软件测试工程师常见的面试题。面试官说我要定你了!

今天我们来聊聊软件测试工程师的面试题有哪些&#xff0c;2024年的8月份马上就过完了&#xff0c;金九银十就业季&#xff0c;跳槽季马上又要来了&#xff0c;毕竟在面试的战场上&#xff0c;知己知彼方能百战不殆。嗯嗯&#xff0c;不错说的真好&#xff01; 1、您所熟悉的测试…

24/8/15算法笔记 项目练习冰湖

import gym from matplotlib import pyplot as plt %matplotlib inline import os os.environ[SDL_VIDEODRIVER]dummy #设置环境变量 SDL_VIDEODRIVERdummy 是在使用基于 SDL (Simple DirectMedia Layer) 的应用程序时&#xff0c;告诉应用程序不使用任何视频驱动程序。这通常…

云计算实训29——mysql主从复制同步、mysql5.7版本安装配置、python操作mysql数据库、mycat读写分离实现

一、mysql主从复制及同步 1、mysql主从自动开机同步 2、配置mysql5.7版本 mysql-5.7.44-linux-glibc2.12-x86_64.tar 启动服务、登录 对数据库进行基本操作 3、使用python操纵mysql数据库 4、编辑python脚本自动化操纵mysql数据库 二、mycat读写分离实现 1.上传jdk和mycat安装…

【C语言】双链表

&#x1f984;个人主页:小米里的大麦-CSDN博客 &#x1f38f;所属专栏:C语言数据结构_小米里的大麦的博客-CSDN博客 &#x1f381;代码托管:黄灿灿/数据结构 (gitee.com) ⚙️操作环境:Visual Studio 2022 目录 一、什么是双链表&#xff1f; 二、双链表温习 1. 双链表的结构…

Windows 11 Build 27686 上手体验:2TB FAT32、更好的沙盒等功能

Windows 11 Build 27686 现已在 Insider Program 的 Canary 频道发布&#xff0c;其中包含一些有趣的内容。该版本确认了微软更改 FAT32 大小限制的计划&#xff0c;并将其大小限制从 32GB 提高到 2TB。与此同时&#xff0c;沙盒也得到了改进。让我们来详细了解一下此次更新。 …

Unity 麦扣 x 勇士传说 全解析 之 怪物基类(2)(附各模块知识的链接,零基础也包学会的牢弟)(案例难度:★★☆☆☆)

1.怪物的动画逻辑一览 2.怪物的受伤死亡逻辑一览 using System.Collections; using System.Collections.Generic; using System.Xml; using UnityEngine;public class Monster : MonoBehaviour {[Header("速度")]public float normalSpeed;public float chaseSpeed;…

Xinstall神器来袭:落地页与App无缝衔接,用户转化不再是难题

在移动互联网时代&#xff0c;App的推广与运营成为了各行各业的关键一环。然而&#xff0c;许多推广者在落地页跳转App这一环节上遇到了不小的挑战。用户点击落地页后&#xff0c;往往需要经过繁琐的步骤才能跳转到App&#xff0c;这不仅降低了用户体验&#xff0c;还严重影响了…

红明谷CTF 2022

MissingFile 前置知识 DPAPI&#xff1a; 全称&#xff1a;Data Protection Application Programming Interface DPAPI blob 一段密文&#xff0c;可以使用Master Key对其解密 Master Key 64字节&#xff0c;用于解密DPAPI blob&#xff0c;使用用户登录密码、SID和16字…

周易测算系统前景分析

周易测算系统作为一种结合传统文化与现代技术的服务平台。其市场前景分析如下&#xff1a; 市场需求增长&#xff1a;随着人们对传统文化的重视和对个性化服务的追求&#xff0c;周易测算系统市场需求正逐渐增长。特别是在互联网的背景下&#xff0c;周易预测服务与互联网的结…

java: 错误: 不支持发行版本

报这样的错误大概率是 idea 中的版本配置不统一导致的 通过确保四个位置的版本一致&#xff0c;解决版本不同的问题 第一个位置&#xff1a;Project ,确保 SDK 和 Project language level 的版本适配 第二个位置&#xff1a;Modules,确保需要运行的模块的 Language level 正确…

本地下载安装WampServer结合内网穿透配置公网地址远程访问详细教程

文章目录 前言1.WampServer下载安装2.WampServer启动3.安装cpolar内网穿透3.1 注册账号3.2 下载cpolar客户端3.3 登录cpolar web ui管理界面3.4 创建公网地址 4.固定公网地址访问 前言 Wamp 是一个 Windows系统下的 Apache PHP Mysql 集成安装环境&#xff0c;是一组常用来…

AI浪潮下的教育革新:把握机遇,拥抱变化!

在全球范围内&#xff0c;AI技术正以前所未有的速度改变着我们的生活和工作方式。据麦肯锡数据预测&#xff0c;到2045年左右&#xff0c;有50%的工作将被AI替代。与此同时&#xff0c;具有创造力、深度思考的高阶智力的人才&#xff0c;将享受到AIGC带来的效率优势&#xff0c…

Maven的依赖范围

依赖的jar包&#xff0c;默认情况下&#xff0c;可以在任何地方使用&#xff0c;可以通过scope来设置作用范围 作用范围&#xff1a; 主程序范围有效&#xff08;main文件夹范围内&#xff09;测试程序范围有效&#xff08;test文件夹范围内&#xff09;是否参与打包运行&…

HTML静态网页成品作业(HTML+CSS)——古诗词网设计制作(5个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码CSS部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有5个页面。 &#x1…

产线一直在用的 RabbitMQ 搭建教程(含负载均衡配置,验证脚本,监控案例),偷偷抄出来的,建议收藏备用

本文介绍公司一直在用的 rabbitmq 集群安装部署过程&#xff0c;版本不算太新&#xff0c;但一直稳定运行&#xff0c;对其他版本安装也有一定的参考价值&#xff0c;建议收藏备用。 简介 官网&#xff1a;https://www.rabbitmq.com/ RabbitMQ 是一个开源的遵循 AMQP(Advance…

超详细的Vue新手向教程

一&#xff0c;前言 本篇文章的正文部分为渐近式介绍Vue基础中的OptionAPI和相关指令&#xff0c;在两大内容之外&#xff0c;本文结尾处会附上vue的特性。 ps:本文总字数过22000&#xff0c;足够详细&#xff0c;尽量新手向的同时也包含一些原理性知识&#xff0c;部分内容…

TILs 评分:TCGA 肿瘤浸润淋巴细胞病理切片深度学习评分!图片下载与可视化

生信碱移 病理切片的TILs评分 TCGA 数据库是最大的肿瘤组学公开数据库之一。尽管如此&#xff0c;更多的研究往往仅局限于关注 TCGA 中各类肿瘤样本的上游组学信息或基本病理特征&#xff0c;而忽略了对样本数字化 H&E 病理染色图像的进一步应用。 ▲ TCGA中肿瘤样本的病…

Centos系统中创建定时器完成定时任务

Centos系统中创建定时器完成定时任务 时间不一定能证明很多东西&#xff0c;但是一定能看透很多东西&#xff0c;坚信自己的选择&#xff0c;不动摇&#xff0c;使劲跑&#xff0c;明天会更好。 在 CentOS 上&#xff0c;可以使用 systemd 定时器来创建一个每十秒执行一次的任务…

拟合与插值|线性最小二乘拟合|非线性最小二乘拟合|一维插值|二维插值

挖掘数据背后的规律是数学建模的重要任务&#xff0c;拟合与插值是常用的分析方法 掌握拟合与插值的基本概念和方法熟悉Matlab相关程序实现能够从数据中挖掘数学规律 拟合问题的基本提法 拟合问题的概念 已知一组数据(以二维为例)&#xff0c;即平面上n个点 ( x i , y i ) …

Blazor开发框架Known-V2.0.8

V2.0.8 Known是基于Blazor的企业级快速开发框架&#xff0c;低代码&#xff0c;跨平台&#xff0c;开箱即用&#xff0c;一处代码&#xff0c;多处运行。目前已有部分客户在使用&#xff0c;最近客户的项目和产品&#xff0c;有的在Docker中运行&#xff0c;有的在重新升级改造…