小程序 Button

  • 按钮参数

    属性 类型 默认值 必填 说明
    size string default 按钮的大小
    type string default 按钮的样式类型
    plain boolean false 按钮是否镂空,背景色透明
    disabled boolean false 是否禁用
    loading boolean false 名称前是否带 loading 图标
    form-type string 用于 form 组件,点击分别会触发 form 组件的 submit/reset 事件
    open-type string 微信开放能力
    hover-class string button-hover 指定按钮按下去的样式类。当 hover-class="none" 时,没有点击态效果
    hover-stop-propagation boolean false 指定是否阻止本节点的祖先节点出现点击态
    hover-start-time number 20 按住后多久出现点击态,单位毫秒
    hover-stay-time number 70 手指松开后点击态保留时间,单位毫秒
    lang string en 指定返回用户信息的语言,zh_CN 简体中文,zh_TW 繁体中文,en 英文。
    session-from string 会话来源,open-type="contact"时有效
    send-message-title string 当前标题 会话内消息卡片标题,open-type="contact"时有效
    send-message-path string 当前分享路径 会话内消息卡片点击跳转小程序路径,open-type="contact"时有效
    send-message-img string 截图 会话内消息卡片图片,open-type="contact"时有效
    app-parameter string 打开 APP 时,向 APP 传递的参数,open-type=launchApp时有效
    show-message-card boolean false 是否显示会话内消息卡片,设置此参数为 true,用户进入客服会话会在右下角显示"可能要发送的小程序"提示,用户点击后可以快速发送小程序消息,open-type="contact"时有效
    bindgetuserinfo eventhandle 用户点击该按钮时,会返回获取到的用户信息,回调的detail数据与wx.getUserInfo返回的一致,open-type="getUserInfo"时有效
    bindcontact eventhandle 客服消息回调,open-type="contact"时有效
    bindgetphonenumber eventhandle 获取用户手机号回调,open-type=getPhoneNumber时有效
    binderror eventhandle 当使用开放能力时,发生错误的回调,open-type=launchApp时有效
    bindopensetting eventhandle 在打开授权设置页后回调,open-type=openSetting时有效
    bindlaunchapp eventhandle 打开 APP 成功的回调,open-type=launchApp时有效
  • form-type 的合法值

    说明
    submit 提交表单
    reset 重置表单
    代码示例:
    //index.wxml
    <view class="container">
    <view class="page-body">
    <form catchsubmit="formSubmit" catchreset="formReset">
    <view class="page-section page-section-gap">
    <view class="page-section-title">switch</view>
    <switch name="switch"/>
    </view>
    
    <view class="page-section page-section-gap">
    <view class="page-section-title">radio</view>
    <radio-group name="radio">
    <label><radio value="radio1"/>选项一</label>
    <label><radio value="radio2"/>选项二</label>
    </radio-group>
    </view>
    
    <view class="page-section page-section-gap">
    <view class="page-section-title">checkbox</view>
    <checkbox-group name="checkbox">
    <label><checkbox value="checkbox1"/>选项一</label>
    <label><checkbox value="checkbox2"/>选项二</label>
    </checkbox-group>
    </view>
    
    <view class="page-section page-section-gap">
    <view class="page-section-title">slider</view>
    <slider value="50" name="slider" show-value ></slider>
    </view>
    
    <view class="page-section">
    <view class="page-section-title">input</view>
    <view class="weui-cells weui-cells_after-title">
    <view class="weui-cell weui-cell_input">
    <view class="weui-cell__bd" style="margin: 30rpx 0" >
    <input class="weui-input" name="input" placeholder="这是一个输入框" />
    </view>
    </view>
    </view>
    </view>
    
    <view class="btn-area">
    <button style="margin: 30rpx 0" type="primary" formType="submit">Submit</button>
    <button style="margin: 30rpx 0" formType="reset">Reset</button>
    </view>
    </form>
    </view>
    </view>
    
    
    //index.js
    Page({
        onShareAppMessage() {
          return {
            title: 'form',
            path: 'page/component/pages/form/form'
          }
        },
      
        data: {
          pickerHidden: true,
          chosen: ''
        },
      
        pickerConfirm(e) {
          this.setData({
            pickerHidden: true
          })
          this.setData({
            chosen: e.detail.value
          })
        },
      
        pickerCancel() {
          this.setData({
            pickerHidden: true
          })
        },
      
        pickerShow() {
          this.setData({
            pickerHidden: false
          })
        },
      
        formSubmit(e) {
          console.log('form发生了submit事件,携带数据为:', e.detail.value)
        },
      
        formReset(e) {
          console.log('form发生了reset事件,携带数据为:', e.detail.value)
          this.setData({
            chosen: ''
          })
        }
    })
    
    
    
  • open-type 的合法值

    说明
    contact 打开客服会话,如果用户在会话中点击消息卡片后返回小程序,可以从 bindcontact 回调中获得具体信息,具体说明
    share 触发用户转发,使用前建议先阅读使用指引
    getPhoneNumber 获取用户手机号,可以从 bindgetphonenumber 回调中获取到用户信息
    getUserInfo 获取用户信息,可以从 bindgetuserinfo 回调中获取到用户信息
    launchApp 打开APP,可以通过 app-parameter 属性设定向APP传的参数具体说明
    openSetting 打开授权设置页
    feedback 打开“意见反馈”页面,用户可提交反馈内容并上传日志,开发者可以登录小程序管理后台后进入左侧菜单“客服反馈”页面获取到反馈内容
  • getPhoneNumber

    获取微信用户绑定的手机号,需先调用 wx.login 接口。
    因为需要用户主动触发才能发起获取手机号接口,所以该功能不由 API 来调用,需用 button 组件的点击来触发。
    注意:目前该接口针对非个人开发者,且完成了认证的小程序开放(不包含海外主体)。需谨慎使用,若用户举报较多或被发现在不必要场景下使用,微信有权永久回收该小程序的该接口权限。

    使用方法:

    需要将 button 组件 open-type 的值设置为 getPhoneNumber,当用户点击并同意之后,可以通过 bindgetphonenumber 事件回调获取到微信服务器返回的加密数据, 然后在第三方服务端结合 session_key 以及 app_id 进行解密获取手机号。
    注意:在回调中调用 wx.login 登录,可能会刷新登录态。此时服务器使用 code 换取的 sessionKey 不是加密时使用的 sessionKey,导致解密失败。建议开发者提前进行 login;或者在回调中先使用 checkSession 进行登录态检查,避免 login 刷新登录态。
    代码示例:
    //index.wxml
    <button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber"></button>
    
    
    //index.js
    Page({
      getPhoneNumber (e) {
        console.log(e.detail.errMsg)
        console.log(e.detail.iv)
        console.log(e.detail.encryptedData)
      }
    })
    
    
    例如唯品会点击获取手机号授权登录效果:
    获取手机号
  • wx.getUserInfo(Object object)

    获取用户信息参数:
    属性 类型 默认值 必填 说明
    withCredentials boolean 是否带上登录态信息。当 withCredentials 为 true 时,要求此前有调用过 wx.login 且登录态尚未过期,此时返回的数据会包含 encryptedData, iv 等敏感信息;当 withCredentials 为 false 时,不要求有登录态,返回的数据不包含 encryptedData, iv 等敏感信息。
    lang string en 显示用户信息的语言
    success function 接口调用成功的回调函数
    fail function 接口调用失败的回调函数
    complete function 接口调用结束的回调函数(调用成功、失败都会执行)

    object.success 回调成功后参数

    属性 类型 说明
    userInfo UserInfo 用户信息对象,不包含 openid 等敏感信息
    rawData string 不包括敏感信息的原始数据字符串,用于计算签名
    signature string 使用 sha1( rawData + sessionkey ) 得到字符串,用于校验用户信息
    encryptedData string 包括敏感数据在内的完整用户信息的加密数据
    iv string 加密算法的初始向量
    cloudID string 敏感数据对应的云 ID,开通云开发的小程序才会返回,可通过云调用直接获取开放数据,详细见云调用直接获取开放数据
    // 必须是在用户已经授权的情况下调用
    wx.getUserInfo({
      success: function(res) {
        var userInfo = res.userInfo
        var nickName = userInfo.nickName
        var avatarUrl = userInfo.avatarUrl
        var gender = userInfo.gender //性别 0:未知、1:男、2:女
        var province = userInfo.province
        var city = userInfo.city
        var country = userInfo.country
      }
    })
    
    
    小程序用户信息组件示例代码:
    // 如果只是展示用户头像昵称,可以使用 <open-data /> 组件 
    <open-data type="userAvatarUrl"></open-data>
    <open-data type="userNickName"></open-data>
    //需要使用 button 来授权登录
    <button wx:if="{{canIUse}}" open-type="getUserInfo" bindgetuserinfo="bindGetUserInfo">授权登录</button>
    <view wx:else>请升级微信版本</view>
    
    
    Page({
      data: {
        canIUse: wx.canIUse('button.open-type.getUserInfo')
      },
      onLoad: function() {
        // 查看是否授权
        wx.getSetting({
          success (res){
            if (res.authSetting['scope.userInfo']) {
              // 已经授权,可以直接调用 getUserInfo 获取头像昵称
              wx.getUserInfo({
                success: function(res) {
                  console.log(res.userInfo)
                }
              })
            }
          }
        })
      },
      bindGetUserInfo (e) {
        console.log(e.detail.userInfo)
      }
    })