10-vue移动端项目(我的my页面与个人信息info页面: vant预览图片组件, formdata管理头像文件上传,fileReander将图片文件转换为路径)

我的页面

在这里插入图片描述

01 - 静态页面

  • 结构 & 样式
    • 作者信息区域:
    • 收藏区域
    • 消息区域
<template>
  <div class="my">
    <!-- 个人信息区域 -->
    <div class="top">
      <div class="msg">
        <img @click="$router.push('/info')" :src="userInfo.photo" alt/>
        <span>{{userInfo.name}}</span>
        <div class="read">今日阅读</div>
      </div>
      <div class="other">
        <div class="item">
          <div class="count">{{userInfo.art_count}}</div>
          <div class="txt">动态</div>
        </div>
        <div class="item">
          <div class="count">{{userInfo.follow_count}}</div>
          <div class="txt">关注</div>
        </div>
        <div class="item">
          <div class="count">{{userInfo.fans_count}}</div>
          <div class="txt">粉丝</div>
        </div>
      </div>
    </div>
    <!-- 收藏区域 -->
    <van-grid :column-num="3">
      <van-grid-item icon="star-o" text="收藏" />
      <van-grid-item icon="clock-o" text="历史" />
      <van-grid-item icon="orders-o" text="作品" />
    </van-grid>
    <!-- 信息区域 -->
    <van-cell-group>
      <van-cell title="消息通知" is-link />
      <van-cell title="用户反馈" is-link />
      <van-cell title="小智同学" is-link />
    </van-cell-group>
  </div>
</template>

02 - 数据的渲染

  • 步骤
    • 1.0 在打开页面时得到用户的相关信息
      • 请求服务器接口(获取用户自己信息)
    • 2.0 并且渲染到页面上
      在这里插入图片描述

个人信息

在这里插入图片描述

01 - 创建组件

  • 创建组件 & 创建路由
    在这里插入图片描述
  • 设置入口
    • 在我的页面的用户头像位置
      在这里插入图片描述

02 - 完成结构 & 样式

组成:

  • 头部标题
  • 信息一区域
  • 信息二区域

<template>
  <div class="info">
    <van-nav-bar title="个人信息" right-text="保存" left-arrow @click-left="$router.back()"  @click-right="save" />
     <van-cell @click="openAvatar"  title="头像" is-link>
        <template #default>
           <img :src="userData.photo" alt="">
        </template>
     </van-cell>
     <van-cell @click="nameshow=true" title="昵称" :value="userData.name" is-link/>
     <van-cell  title="介绍" :value="userData.intro"  is-link/>
     <van-cell  title="性别" :value="userData.dender===0? '':''" is-link/>
     <van-cell  title="生日" :value="userData.birthday"  is-link/>
     <!-- 修改用户昵称弹出层 -->
     <van-popup v-model="nameshow" position="bottom" :style="{ height: '8%' }" >
        <van-field required v-model="userData.name"  placeholder="请输入" />
    </van-popup>
    <!-- 导入修改头像子组件 -->
    <filePopup ref="avatarRef" />
  </div>
</template>

03 - 渲染用户信息

步骤:

  • 1.0 在打开页面时,得到用户的信息

    • 请求服务器接口:获取用户自己信息
      • 头像 & 昵称 & 介绍
    • 请求服务器接口:获取用户个人资料
      • 性别 & 生日
  • 2.0 保存用户的信息

  • 3.0 将用户信息渲染到页面上
    在这里插入图片描述
    注意点:

  • 如果直接将用户信息渲染到页面上是不行的

    • 因为数据的响应式是有前提条件的

04 - 修改用户信息

步骤:

  • 1.0 点击需要修改的选项
  • 2.0 弹出一个修改面板在面板中显示内容
    在这里插入图片描述
  • 3.0 修改内容,点击保存,修改信息
    • 请求服务器接口:
      在这里插入图片描述在这里插入图片描述
    • 在这里插入图片描述

注意点:

  • 完成其它属性修改时可以使用的组件:

05 - 头像的上传

在这里插入图片描述
步骤:

  • 1.0 点击头像选项打开一个头像操作面板
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    • 封装一个头像操作面板
  • 2.0 点击从相册中选择:弹出图片选择器

    • 打开图片选择器使用一个: <input type="file"> 开启
    • 这个上传框必须隐藏
      在这里插入图片描述
    • 将来点击从相册中选择,应该触发上传框的点击事件

在这里插入图片描述

  • 3.0 选中图片,弹出一个图片预览框

    • 得到选择的图片:

      • 在上传框中有一个事件: onchange 事件可以得到图片的变化
        在这里插入图片描述
    • 使用 vant 中的组件:ImagePreview

    • 为了能够让图片正常显示在组件中:应该将图片对象转为一个图片地址

      • 方法一: URL.createObjectURL

        • 这种方式兼容性会差一点
      • 方法二: fileReander MDN使用说明: link.

        // 得到要转换的图片对象
        var file = document.querySelector('input[type=file]').files[0]
        // 创建一个 fileReader 对象
        var reader = new FileReader()
        // 调用方法进行转换
        reader.readAsDataURL(file)
        // 接收转换的结果:转换之后执行的事件
        reader.addEventListener('load', function() {
            // 可以通过 render.result 得到转换之后的 URL
        })
        
  • 4.0 点击关闭图片,弹出一个提示框:访问用户是否将图片设置为头像

    • 给预览框设置一个关闭事件:

      ImagePreview({
        images: [
          'https://img.yzcdn.cn/vant/apple-1.jpg',
          'https://img.yzcdn.cn/vant/apple-2.jpg',
        ],
        onClose() {
          // do something
        },
      });
      
  • 5.0 点击确定,将头像进行修改
    在这里插入图片描述

    • 将图片提交到服务器
      • 请求服务器接口(编辑用户照片资料(头像、身份证照片))
      • bug:
        • 表现:提交到服务器的图片为空

        • 原因:

          • 由于异步请求时,请求的参数中有文件,文件是无法提交到服务器中的
        • 解决方案:

          • 可以使用 formData 来管理数据就 可以了

          在这里插入图片描述

Vue3中使用Vant进行图片上传的流程如下: 1. 首先,你需要在Vue组件中引入Vant的Uploader组件。可以使用以下代码片段: ```javascript <template> <van-uploader :after-read="afterRead" accept="image/*" :max-count="1" :max-size="100 * 1024 * 1024" @oversize="onOversize" /> </template> <script> import { Uploader } from 'vant'; export default { components: { \[Uploader.name\]: Uploader, }, methods: { afterRead(file) { // 在这里可以将文件上传到服务器 // 你可以将文件转换为base64格式进行提交 this.formData.File = file.content; }, onOversize() { // 当文件大小超过限制时触发 }, }, }; </script> ``` 2. 在Vue组件中,你需要定义一个`afterRead`方法作为文件读取完成后的回调函数。在这个方法中,你可以将文件上传到服务器。在这个例子中,我们将文件的base64内容存储在`formData.File`中。 3. 你还可以使用`accept`属性来限制上传文件的格式。在这个例子中,我们使用`accept="image/*"`来只允许上传图片文件。 4. 使用`max-count`属性来限制文件上传的数量。在这个例子中,我们将最大上传数量限制为1。 5. 使用`max-size`属性来限制文件的大小。在这个例子中,我们将文件大小限制为100MB。 总结起来,以上代码展示了在Vue3中使用Vant进行图片上传的基本流程。你可以根据自己的需求进行相应的修改和扩展。 #### 引用[.reference_title] - *1* *3* [vue+vant 表单提交,实现图片上传](https://blog.csdn.net/onlyhqm/article/details/85250216)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Vue项目+Vant组件库:上传图片或视频](https://blog.csdn.net/chenxiaoyuan1130/article/details/119870175)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值