主要内容

本章目标:vue+element-ui实现编辑个人资料效果
注意事项:安装element-ui
1.效果展示


2.视图页面:views
space.vue

<template><div class="space"><h2>欢迎来到我的美食空间</h2><div class="user-info"><div class="user-avatar"><img src="https://wx4.sinaimg.cn/orj360/002DNFeDly1gueniwvu3qj60tp0tiju402.jpg" alt=""></div><div class="user-main"><h1></h1><span class="info"><em>加入美食杰</em>|<router-link :to="{name:'edit'}" >编辑个人资料</router-link></span><div class="tools" ><a href="javascript:;" class="follow-at">关注</a></div></div><ul class="user-more-info"><li><div><span>关注</span><strong>77</strong></div></li><li><div><span>粉丝</span><strong>44</strong></div></li><li><div><span>收藏</span><strong>11</strong></div></li><li><div><span>发布菜谱</span><strong>55</strong></div></li></ul></div><div class="user-info-show"><router-view ></router-view></div></div>
</template>
<script>
export default {name: 'Space',data(){return {}},watch:{},methods:{}
}
</script>
<style lang="stylus">
.spaceh2text-align centermargin 20px 0.user-infoheight 210pxbackground-color #fffdisplay flex.user-avatarwidth 210pxheight 210pximg width 100%height 100% .user-mainwidth 570pxpadding 20pxposition relativeh1font-size 24pxcolor #333line-height 44px.info  font-size 12pxline-height 22pxcolor #999acolor #999.tools position absoluteright 20pxtop 20pxvertical-align top;adisplay inline-blockpadding 3px 0width 50pxcolor #ffftext-align centera.follow-atbackground-color  #ff3232a.no-follow-at background-color #999.user-more-infowidth 190pxoverflow hiddenpadding-top 20pxliwidth 81pxheight 81pxborder-radius 32pxborder-bottom-right-radius 0margin 0px 8px 8px 0pxfloat leftdivdisplay blockheight 81pxwidth 81pxbox-shadow 0px 0px 6px rgba(0,0,0,0.05) insetborder-radius 32pxborder-bottom-right-radius 0span color #999line-height 20pxdisplay blockpadding-left 14pxpadding-top 14pxstrong display blockfont-size 18pxcolor #ff3232font-family Microsoft Yaheipadding-left 14pxline-height 32px.user-navmargin 20px 0 20px 0.user-info-showmin-height 300pxbackground #fffpadding-top 20px.info-emptywidth 100% min-height inheritdisplay flexalign-items centerjustify-content:center;p text-align centerfont-size 12pxa text-align centerdisplay blockheight 48pxwidth 200pxline-height 48pxfont-size 14pxbackground #ff3232color #ffffont-weight boldmargin 0px auto.el-tabs__item.is-active color: #ff3232;.el-tabs__active-barbackground-color: #ff3232;.el-tabs__nav-wrap::afterbackground-color: transparent;
</style>

edit.vue

<template><div class="edit"><div class="edit-item"><span class="label">修改头像</span>//upload-img此时是个自定义组件<upload-imgimgMaxWidth="210"action="/api/upload?type=user" :imageUrl="avatar" @res-url="(data)=>{avatar=data.resImgUrl}"></upload-img></div><div class="edit-item"><span class="label">修改名称</span><div>//用v-model来绑定数据<el-input v-model="name" class="create-input" placeholder="请输入内容"></el-input></div></div><div class="edit-item"><span class="label">个人简介</span><div><el-input  v-model="sign"  type="textarea" class="create-input" placeholder="请输入内容"></el-input></div></div><div><el-button class="send" type="primary" size="medium" @click="save">保存</el-button></div></div>
</template>
<script>
import UploadImg from '@/components/upload-img'
import {userEdit} from '@/service/api'
export default {components: {UploadImg},data(){//拿到store中的数据const userInfo=this.$store.state.userInforeturn {//先存数据再渲染avatar:userInfo.avatar,name:userInfo.name,sign:userInfo.sign}},methods:{async save(){//点击事件let data=await userEdit({avatar:this.avatar,name:this.name,sign:this.sign});if(data.code === 0){//判断下如果成功进行跳转this.$router.push({//向添加数据name:'space'})}}}
}
</script>
<style lang="stylus">
.editbackground-color #fffpadding 10px 0 20px 20px.edit-item display flexmargin-bottom 20px.labelmargin-right 10px
</style>

3.组件零部件components
upload-img.vue

<template><el-upload class="avatar-uploader"//注意要用':'动态绑定下:action="action":show-file-list="false":on-success="handleAvatarSuccess":before-upload="beforeAvatarUpload"><img v-if="imageUrl" :src="data:imageUrl" class="avatar"><i v-else class="el-icon-plus avatar-uploader-icon"></i><img src="url" /></el-upload>
</template>
<script>
export default {props:{action:String,maxSize:{//限制类型type:Number,default:2},imageUrl:{type:String,default:''},imgMaxWidth:{type:[Number,String],default:'auto'}},data(){return {}},methods: {//图片上传成功之后返回图片地址handleAvatarSuccess(res, file) {//存图片地址以参数的形式传递if(res.code===1){this.$message({message:res.mes,type:'warning',})return ;}this.imageUrl = URL.createObjectURL(file.raw);thsi.$emit('res-url',{resImgUrl:res.data.url})},//图片上传之前beforeAvatarUpload(file) {// 限制图片类型const isJPG = file.type === 'image/jpeg';const isLt2M = file.size / 1024 / 1024 < 2;if (!isJPG) {this.$message.error('上传头像图片只能是 JPG 格式!');}if (!isLt2M) {this.$message.error('上传头像图片大小不能超过 2MB!');}return isJPG && isLt2M;}},
}
</script>

注意:打开element-ui官网找到Upload上传,点开用户头像上传,拿到想要的效果

4.路由:index.js

import Vue from 'vue'
import Router from 'vue-router'
Vue.use(Router)
import Store from '@/store'
import Space from '@/views/user-space/space.vue'
import Edit from "@/views/user-space/edit.vue"
const router = new Router({mode:"history",routes:[{path:'/space',name:"space",title:"我的",component:Space,meta:{login:true}},{path:'/edit',name:"edit",title:"编辑",component:Edit,meta:{login:true}}]
});
export default router;

总结:

v-model监听 在组件上面是双向绑定的,静态方法此时加 ‘:’ ,变成动态的
今天的内容就先到这里 因为还有一些没完善所以不是很好 后面再继续改进!

Vue项目实现编辑个人资料效果相关推荐

  1. Vue项目中用vue-video-player实现直播效果(m3u8格式)

    项目中有一个需求,需要实现直播功能.后端接口返回的是m3u8数据流,于是引入vue-video-player插件播放m3u8数据流实时视频. 1.安装 npm install vue-video-pl ...

  2. vue项目实现多张图片轮番效果

    vue中轮播图的实现 轮播图中html结构一般由主体图片.下方小圆圈.上一张和下一张组成. 主体图片能够实现两秒切换一次,并且对应的小圆圈被选中 点击上一张和下一张按钮切换相应图片,同时小圆圈产生变化 ...

  3. 美食杰项目 -- 编辑个人资料(六)

    目录 前言: 具体实现思路: 步骤: 1. 展示美食杰编辑个人资料效果 2. 引入element-ui 3. 代码 总结: 前言: 本文给大家讲解,美食杰项目中 实现编辑个人资料页的效果,和具体代码. ...

  4. VUE项目实践1:设置编辑按钮,可保存,双向绑定

    VUE项目实践:设置编辑按钮,可保存,双向绑定 目录结构: 实现效果: 所有代码: 实现页面:ipobtion.vue 引用页面:index.vue 目录结构: ​​​​​​ ​​ 实现效果: ​​​ ...

  5. 在vue项目中使用gsap,实现极佳的2d动画效果

    在vue项目中使用gsap,实现极佳的2d动画效果 一.GSAP是什么? 二.使用步骤 1.引入库 2.在vue中使用 3.vue组件使用gsap完整代码 总结 一.GSAP是什么? GSAP全称是G ...

  6. vue项目下拉框内容过长做一个滚动条的效果

    vue项目下拉框内容过长做一个滚动条的效果 如下图: 关键代码如下:

  7. VUE项目开发,使用canvas实现图片签名编辑手写板功能

    vue项目使用canvas实现手写板功能 完整的效果图如下: 直接上代码,下面代码可以当做组件直接引用,根据自己的需求传对应的图片即可,操作图标需要自己替换,保存功能也需要自己实现. CanvasDi ...

  8. vue项目开发 实现自定义Transfer穿梭框效果(结合el-tree)

    vue项目开发 实现自定义Transfer穿梭框效果(结合el-tree) 效果图: 直接上代码: // An highlighted block <template><el-dia ...

  9. vue 项目中使用v-loading实现加载效果

    当在vue项目中请求后台接口时,常常会使用 loding 过渡数据的加载时间. 如果 loading 作为一个全局的加载状态,应该写在项目中的App.vue中 在el-table标签中添加v-load ...

最新文章

  1. 《云安全原理与实践》——2.2 云计算面临的管理风险
  2. openstack neutron-fwaas 防火墙之iptables实现细节详解
  3. 聚类(三)FUZZY C-MEANS 模糊c-均值聚类算法——本质和逻辑回归类似啊
  4. [数据结构考前必看]中缀表达式转化成后缀表达式_例题超多+分步骤讲解+带你手算
  5. Python Django 生成随机字符串UUID的使用示例
  6. 蓝牙信号强度检测app_基于蓝牙技术的智能插座方案
  7. thinkphp实现当前页面点击下载文件实例
  8. Python使用AES算法进行加解密
  9. 【免费毕设】基于Web的subversion用户管理系统(系统+论文)
  10. Linux下读写UART串口的代码
  11. 转 C#正则表达式小结 匹配
  12. GCode软件和资料
  13. 工作总结,关于浏览器不兼容的问题。
  14. 谁说游戏里的建模都是贴图?细数那些可以肆意破坏场景的单机大作
  15. 计算机单招知识点重点,2018年度单招考试《数学》必背知识点(一).doc
  16. 3dmax建模如何设置凹凸贴图
  17. 【转载】API:简单实现多人聊天室
  18. Python入门学习之个人税务计算练习(if)
  19. 浅谈5G网络及其应用
  20. android 的Zygote 分析

热门文章

  1. ffmpeg rtmp 花屏_FFmpeg - 如何编码封装透明通道视频
  2. WOW魔兽世界账号安全完全攻略(转)
  3. 中国式家长手游电脑版怎么玩 中国式家长手游模拟器教程
  4. douyin 之xgorgon0404参数
  5. 英文科技论文的撰写方法
  6. uniapp 跳转外部app(淘宝)
  7. MySQL创建只读用户
  8. 微信jsapi上传图片php,PHP+MySQL微信通过jsapi分享到朋友圈等平台,实现设置图片、链接...
  9. [Power BI] 皇冠蛋糕数据分析
  10. 当前电商行业的私域流量加粉最优解决方案