注冊(cè)

微信小程序開(kāi)發(fā)之OFO共享單車,微信小程序個(gè)人中心頁(yè)制作

2017-12-20
導(dǎo)讀:上一節(jié)我們實(shí)現(xiàn)了單車報(bào)障頁(yè),這一節(jié)我們來(lái)實(shí)現(xiàn)個(gè)人中心頁(yè)面: Screenshot_2017-05-07-10-15-09-971_com.tencent.mm.png (36.15 KB, 下載次數(shù): 7) 下載附件 保存到相冊(cè) 2017-6-5 14:37 上傳 Screenshot_2017-05-0...
上一節(jié)我們實(shí)現(xiàn)了單車報(bào)障頁(yè),這一節(jié)我們來(lái)實(shí)現(xiàn)個(gè)人中心頁(yè)面:
老套路,先進(jìn)行頁(yè)面分析
  • 個(gè)人中心頁(yè)有兩種狀態(tài),即未登錄和已登錄,所以要求不同數(shù)據(jù)驅(qū)動(dòng)產(chǎn)生的不同頁(yè)面
  • 點(diǎn)擊登錄/退出登錄按鈕需要響應(yīng)合理邏輯,并改變按鈕樣式
  • 只有登錄狀態(tài)下才會(huì)顯示我的錢(qián)包按鈕

頁(yè)面結(jié)構(gòu)
  1. <!--pages/my/index.wxml-->
  2. <view class="container">
  3.     <view class="user-info">
  4.     <!-- 用戶未登錄就沒(méi)有頭像-->
  5.     <block wx:if="{{userInfo.avatarUrl != ''}}">
  6.         <image src="{{userInfo.avatarUrl}}"></image>
  7.     </block>
  8.         <text>{{userInfo.nickName}}</text>
  9.     </view>
  10.     <!-- 用戶未登錄就沒(méi)有錢(qián)包按鈕-->
  11.     <block wx:if="{{userInfo.avatarUrl != ''}}">
  12.     <view class="my-wallet tapbar" bindtap="movetoWallet">
  13.         <text>我的錢(qián)包</text>
  14.         <text>></text>
  15.     </view>
  16.     </block>
  17.     <button bindtap="bindAction" class="btn-login" hover-class="gray" type="{{bType}}" >{{actionText}}</button>
  18. </view>
復(fù)制代碼

指令wx:if="boolean":
當(dāng)boolean為true,被它(block)包裹的元素將會(huì)顯示,否則不現(xiàn)實(shí),這樣可以處理在未登錄狀態(tài)下不顯示頭像和錢(qián)包按鈕


頁(yè)面樣式
  1. /* pages/my/index.wxss */
  2. .user-info{
  3.         background-color: #fff;
  4.         padding-top: 60rpx;
  5. }
  6. .user-info image{
  7.         display: block;
  8.         width: 180rpx;
  9.         height: 180rpx;
  10.         border-radius: 50%;
  11.         margin: 0 auto 40rpx;
  12.         box-shadow: 0 0 20rpx rgba(0,0,0,.2)
  13. }
  14. .user-info text{
  15.         display: block;
  16.         text-align: center;
  17.         padding: 30rpx 0;
  18.         margin-bottom: 30rpx;
  19. }
  20. .btn-login{
  21.         position: absolute;
  22.         bottom: 60rpx;
  23.         width: 90%;
  24.         left: 50%;
  25.         margin-left: -45%;
  26. }
  27. .gray{
  28.         background-color: #ccc;
  29. }
復(fù)制代碼

頁(yè)面數(shù)據(jù)邏輯(未登錄狀態(tài)下的數(shù)據(jù)模板初始值定義在data對(duì)象里)
  1. // pages/my/index.js
  2. Page({
  3.   data:{
  4.     // 用戶信息
  5.     userInfo: {
  6.       avatarUrl: "",
  7.       nickName: "未登錄"
  8.     },
  9.     bType: "primary", // 按鈕類型
  10.     actionText: "登錄", // 按鈕文字提示
  11.     lock: false //登錄按鈕狀態(tài),false表示未登錄
  12.   },
  13. // 頁(yè)面加載
  14.   onLoad:function(){
  15.     // 設(shè)置本頁(yè)導(dǎo)航標(biāo)題
  16.     wx.setNavigationBarTitle({
  17.       title: '個(gè)人中心'
  18.     })
  19.     // 獲取本地?cái)?shù)據(jù)-用戶信息
  20.     wx.getStorage({
  21.       key: 'userInfo',
  22.       // 能獲取到則顯示用戶信息,并保持登錄狀態(tài),不能就什么也不做
  23.       success: (res) => {
  24.         wx.hideLoading();
  25.         this.setData({
  26.           userInfo: {
  27.             avatarUrl: res.data.userInfo.avatarUrl,
  28.             nickName: res.data.userInfo.nickName
  29.           },
  30.           bType: res.data.bType,
  31.           actionText: res.data.actionText,
  32.           lock: true
  33.         })
  34.       }
  35.     });
  36.   },
  37. // 登錄或退出登錄按鈕點(diǎn)擊事件
  38.   bindAction: function(){
  39.     this.data.lock = !this.data.lock
  40.     // 如果沒(méi)有登錄,登錄按鈕操作
  41.     if(this.data.lock){
  42.       wx.showLoading({
  43.         title: "正在登錄"
  44.       });
  45.       wx.login({
  46.         success: (res) => {
  47.           wx.hideLoading();
  48.           wx.getUserInfo({
  49.             withCredentials: false,
  50.             success: (res) => {
  51.               this.setData({
  52.                 userInfo: {
  53.                   avatarUrl: res.userInfo.avatarUrl,
  54.                   nickName: res.userInfo.nickName
  55.                 },
  56.                 bType: "warn",
  57.                 actionText: "退出登錄"
  58.               });
  59.               // 存儲(chǔ)用戶信息到本地
  60.               wx.setStorage({
  61.                 key: 'userInfo',
  62.                 data: {
  63.                   userInfo: {
  64.                     avatarUrl: res.userInfo.avatarUrl,
  65.                     nickName: res.userInfo.nickName
  66.                   },
  67.                   bType: "warn",
  68.                   actionText: "退出登錄"
  69.                 },
  70.                 success: function(res){
  71.                   console.log("存儲(chǔ)成功")
  72.                 }
  73.               })
  74.             }     
  75.           })
  76.         }
  77.       })
  78.     // 如果已經(jīng)登錄,退出登錄按鈕操作     
  79.     }else{
  80.       wx.showModal({
  81.         title: "確認(rèn)退出?",
  82.         content: "退出后將不能使用ofo",
  83.         success: (res) => {
  84.           if(res.confirm){
  85.             console.log("確定")
  86.             // 退出登錄則移除本地用戶信息
  87.             wx.removeStorageSync('userInfo')
  88.             this.setData({
  89.               userInfo: {
  90.                 avatarUrl: "",
  91.                 nickName: "未登錄"
  92.               },
  93.               bType: "primary",
  94.               actionText: "登錄"
  95.             })
  96.           }else {
  97.             console.log("cancel")
  98.             this.setData({
  99.               lock: true
  100.             })
  101.           }
  102.         }
  103.       })
  104.     }   
  105.   },
  106. // 跳轉(zhuǎn)至錢(qián)包
  107.   movetoWallet: function(){
  108.     wx.navigateTo({
  109.       url: '../wallet/index'
  110.     })
  111.   }
  112. })
復(fù)制代碼

使用wx.login({})API來(lái)進(jìn)行登錄,使用wx.getUserInfo({})API來(lái)獲取用戶信息
我們將用戶信息使用wx.setStorage({})API和wx.getStorage({})這兩個(gè)API來(lái)設(shè)置和獲取本地存儲(chǔ),用于模擬維護(hù)用戶登錄狀態(tài)。真實(shí)情況下需要使用session


其他章節(jié)
微信小程序開(kāi)發(fā)之OFO共享單車——掃碼
微信小程序開(kāi)發(fā)之OFO共享單車——單車報(bào)障頁(yè)
微信小程序開(kāi)發(fā)之OFO共享單車——個(gè)人中心頁(yè)
微信小程序開(kāi)發(fā)之OFO共享單車——錢(qián)包與充值
重磅推薦:小程序開(kāi)店目錄

第一部分:小商店是什么

第二部分:如何開(kāi)通一個(gè)小商店

第三部分:如何登錄小商店

第四部分:開(kāi)店任務(wù)常見(jiàn)問(wèn)題

第五部分:小商店可以賣什么

第六部分:HiShop小程序特色功能

第七部分:小程序直播

第八部分:小程序收貨/物流

第九部分:小程序怎么結(jié)算

第十部分:小程序客服

第十一部分:電商創(chuàng)業(yè)

第十二部分:小程序游戲開(kāi)發(fā)