1). 新建修改頭像頁
在 src/views/users 下新建 Avatar.vue 文件,復制貼入以下代碼:
src/views/users/Avatar.vue
1 <template> 2 <div class="col-md-9 left-col"> 3 <div class="panel panel-default padding-md"> 4 <div class="panel-body"> 5 <h2><i class="fa fa-picture-o"></i> 請輸入頭像地址</h2> 6 <hr> 7 <div data-validator-form> 8 <div class="form-group"> 9 <label>頭像預覽:</label> 10 <div> 11 <img :src="avatar" class="avatar-preview-img"> 12 </div> 13 </div> 14 <div class="form-group row"> 15 <div class="col-md-8"> 16 <input v-model.trim.lazy="avatar" v-validator.required="{ title: '頭像地址' }" type="text" class="form-control avatar-input"> 17 </div> 18 <div class="clearfix"></div> 19 </div> 20 21 <div class="form-group"> 22 <button type="submit" class="btn btn-lg btn-primary" @click="updateAvatar">上傳頭像</button> 23 </div> 24 </div> 25 </div> 26 </div> 27 </div> 28 </template> 29 30 <script> 31 export default { 32 name: 'EditAvatar', 33 data() { 34 return { 35 avatar: '' // 頭像地址 36 } 37 }, 38 // 在實例創建完成后,初始化頭像地址的值 39 created() { 40 // 獲取倉庫的用戶信息 41 const user = this.$store.state.user 42 43 if (user && typeof user === 'object') { 44 // 將倉庫的用戶頭像賦值給當前頭像地址 45 this.avatar = user.avatar 46 } 47 }, 48 methods: { 49 // 更新頭像 50 updateAvatar() { 51 const avatar = this.avatar 52 53 // 如果頭像地址不為空 54 if (avatar) { 55 // 新建一個 Image 的實例 56 let img = new Image() 57 58 // 加載成功時,上傳圖片 59 img.onload = () => { 60 // 依然分發一個 updateUser 的事件,這里只需傳入頭像信息 61 this.$store.dispatch('updateUser', { avatar }) 62 this.$message.show('上傳成功') 63 } 64 65 // 加載失敗時,只顯示一個失敗的提示 66 img.onerror = () => { 67 this.$message.show('上傳失敗', 'danger') 68 } 69 70 // 指定圖片地址 71 img.src = avatar 72 } 73 } 74 } 75 } 76 </script> 77 78 <style scoped> 79 .avatar-preview-img { min-width: 200px; min-height: 200px; max-width: 50%;} 80 </style>
2). 添加修改頭像路由
打開 src/router/routes.js 文件,添加修改頭像路由 EditAvatar(注釋部分是涉及的修改):
src/router/routes.js
1 { 2 path: '/users/1/edit_avatar', 3 name: 'EditAvatar', 4 component: () => import('@/views/users/Avatar.vue'), 5 meta: { auth: true } 6 }
