1. 程式人生 > >小程式學習--JS點選按鈕得到使用者授權得到資訊(複用元件)

小程式學習--JS點選按鈕得到使用者授權得到資訊(複用元件)

首先,第一步,建立一個按鈕的元件,方便複用,當點選按鈕時候,會跳出是否授權的對話方塊:

元件的wxml程式碼:

<button  bind:getuserinfo="onGetUserInfo" open-type="{{openType}}" plain="{{true}}" class="container">
    <slot name="img"></slot>    
</button>

繫結事件onGetUserInfo 定義opentype屬性 slot標籤是一個元件插槽

元件的JS程式碼:

component({
  /**
   * 元件的屬性列表
   */
  //開啟插槽
  options:{
    multipleSlots:true
  },
  properties: {
    openType:{
      type:String
    }
  },

  /**
   * 元件的初始資料
   */
  data: {

  },

  /**
   * 元件的方法列表
   */
  methods: {
    onGetUserInfo(event){
      this.triggerEvent('getuserinfo',event.detail,{})
    }
  }
})

在JS中,定義options開啟元件的插槽:true

定義openType屬性的資料型別為字串,

在剛剛wxml程式碼的繫結的事件,編寫觸發器事件,獲取使用者資訊,getuserinfo

元件編寫完之後,在page頁面中進行應用,

首先開啟page頁面的json檔案:(進行配置 元件的呼叫)

page頁面的json程式碼:

{
    "usingComponents":{
       
        "v-button":"/components/image-button/index"
        
    }
}

上面的v-button就是我給剛剛的元件取得名字,可以拿到page頁面的wxml中進行呼叫

page頁面的wxml程式碼:

<!-- 未授權的時候 顯示click me圖片 -->
    <v-button wx:if="{{!authorized}}"
         open-type="getUserInfo" class="avatar-position"
                 bind:getuserinfo="onGetUserInfo">
        <image slot="img" class="avatar" src="/images/my/my.png"/>
    </v-button>
    <!-- 授權的時候 顯示獲取到的頭像 -->
    <view wx:if="{{authorized}}"
         class="avatar-container avatar-position">
        <image src="{{userInfo.avatarUrl}}" class="avatar"/>
        <text>{{userInfo.nickName}}</text>
    </view>

程式碼上已註釋了 ,如果未進行授權的時候,使用者頭像區域部分是一個點選我的圖片按鈕,

在元件標籤內 進行判斷 如果未授權  wx:if="{{!authorized}}" ,顯示click me的頭像 open-type為getuserinfo這個自帶的方法

繫結js檔案中的事件方法名 onGetUserInfo()  點選的時候 就會觸發這個事件

如果授權過了之後,那麼就是wx:if="{{authorized}}" 代表授權成功

然後進行渲染從JS中拿到的值 頭像內容和對應的名字

page頁面的js程式碼:

Page({
  data:{
    //切換授權頭像的變數
    authorized:false,
    userInfo:null,
  },
  onload(options){

    this.userAuthorized()

  },
  //判斷使用者是否已經授權過
  userAuthorized(){
    wx.getSetting({
      success:data=>{
        //使用者授權過
        if(data.authSetting['scope.userInfo']){
          wx.getUserInfo({
            success:data=>{
              this.setData({
                authorized:true,//代表已經授權
                userInfo:data.userInfo

              })
            }
          })
        }else{
          console.log('err')
        }

      }
    })
  },
  onGetUserInfo(event){
    const userInfo = event.detail.userInfo
    if(userInfo){//如果有值的話
      this.setData({
        userInfo:userInfo,
        authorized:true
      })
    }
    
  },
  
  


})

data方面定義兩個變數 一個是authorized 授權變數  一個是userInfo  使用者資訊

授權變數預設為false 未授權  使用者資訊預設為空 null

接下來,定義一個方法,進行判斷使用者是否授權:也就是userAuthorized() 這個方法

如果授權成功,那就進行資料繫結 this.setData更新 變數的值:authorized為true  代表授權了

如果沒有授權成功,就返回錯誤.

還有,定義另外一個方法,用來獲取使用者的資訊,如果獲取到了,同樣就是授權成功 authorized為true userInfo:userInfo

所以 我點選頭像進行使用者資訊授權,就可以獲取到我的資訊了

效果圖:

這邊稍微提一下:如果只是顯示使用者資訊的話,不用像上述的方法那麼麻煩,可以這樣:

使用open-data標籤就能顯示出來  但僅僅是顯示資訊 而不是獲取資訊  概念不一樣

<open-data type="userAvatarUrl" class="avatar avatar-position"/>

初次接觸小程式不到一個星期,歡迎評論多多交流,覺得有用的朋友,標個喜歡哦!