微信小程序开发第一天

Posted by Qiyibaba on February 17, 2022

app.json

{
  "pages":[ // pages字段用于描述小程序所有页面路径,注意,必须与pages目录下的文件夹对应,直接修改app.json文件,会自动添加目录,删除不会自动清理,需要手动删除
    "pages/index/index", // 注意:写在第一位的就是首页
    "pages/logs/logs"
  ],
  "window":{ // 窗口界面
    "backgroundTextStyle":"light", // 背景色,有dark和light
    "navigationBarBackgroundColor": "#fff", // 导航背景色,可定义任意颜色,#fff为缩写,使用6位的即可
    "navigationBarTitleText": "天气预报", // 导航标题
    "navigationBarTextStyle":"black" // 导航文本颜色,black,white
  },
  "style": "v2", // 微信客户端 7.0 开始,UI 界面进行了大改版。小程序也进行了基础组件的样式升级。app.json 中配置 "style": "v2"可表明启用新版的组件样式。
  "sitemapLocation": "sitemap.json", // 指明 sitemap.json 的位置;默认为 'sitemap.json' 即在 app.json 同级目录下名字的 sitemap.json 文件
  "permission": {
    "scope.userLocation": { // 获取地理位置
      "desc": "定位以获取当前位置天气信息"
    }
  }
}

sitemap.json

小程序根目录下的 sitemap.json 文件用于配置小程序及其页面是否允许被微信索引,文件内容为一个 JSON 对象,如果没有 sitemap.json ,则默认为所有页面都允许被索引;

附录1:permission的scope权限类型

scope 对应接口 描述
scope.userLocation wx.getLocation, wx.chooseLocation, wx.startLocationUpdate 地理位置
scope.userLocationBackground wx.startLocationUpdateBackground 后台定位
scope.record wx.startRecord, wx.joinVoIPChat, RecorderManager.start 麦克风
scope.camera camera组件, wx.createVKSession 摄像头
scope.bluetooth wx.openBluetoothAdapter, wx.createBLEPeripheralServer 蓝牙
scope.writePhotosAlbum wx.saveImageToPhotosAlbum, wx.saveVideoToPhotosAlbum 添加到相册
scope.addPhoneContact wx.wx.addPhoneContact 添加到联系人
scope.addPhoneCalendar wx.addPhoneRepeatCalendar, wx.addPhoneCalendar 添加到日历
scope.werun wx.getWeRunData 微信运动步数
scope.address wx.chooseAddress 通讯地址(已取消授权,可以直接调用对应接口)
scope.invoiceTitle wx.chooseInvoiceTitle 发票抬头(已取消授权,可以直接调用对应接口)
scope.invoice wx.chooseInvoice 获取发票(已取消授权,可以直接调用对应接口)
scope.userInfo wx.getUserInfo 用户信息(小程序已回收,请使用头像昵称填写,小游戏可继续调用)

app.js

App() 必须在 app.js 中调用,必须调用且只能调用一次。不然会出现无法预期的后果

// app.js
App({
  onLaunch() { // 小程序初始化完成时触发,全局只触发一次。
    // 展示本地存储能力
    const logs = wx.getStorageSync('logs') || []
    logs.unshift(Date.now())
    wx.setStorageSync('logs', logs)

    // 登录
    wx.login({
      success: res => {
        // 发送 res.code 到后台换取 openId, sessionKey, unionId
      }
    })
  },
  globalData: {
    userInfo: null
  }
})

函数类型

属性 类型 默认值 必填 说明 最低版本
onLaunch function   生命周期回调——监听小程序初始化。  
onShow function   生命周期回调——监听小程序启动或切前台。  
onHide function   生命周期回调——监听小程序切后台。  
onError function   错误监听函数。  
onPageNotFound function   页面不存在监听函数。 1.9.90
onUnhandledRejection function   未处理的 Promise 拒绝事件监听函数。 2.10.0
onThemeChange function   监听系统主题变化 2.11.0
其他 any   开发者可以添加任意的函数或数据变量到 Object 参数中,用 this 可以访问  

globalData全局变量的使用

// 定义:
globalData: {
	myname: "qiyibaba"
}
// 获取值:
// 1.首先定义变量
var app = getApp()
// 2.获取值
data: {
	motto: app.globalData.myname
}

系统默认提供首页index.js

const app = getApp()

Page({ // 注册小程序中的一个页面。接受一个 `Object` 类型参数,其指定页面的初始数据、生命周期回调、事件处理函数等
  data: { // 页面的初始数据
    motto: app.globalData.myname,
    userInfo: {},
    hasUserInfo: false,
    canIUse: wx.canIUse('button.open-type.getUserInfo'),
    canIUseGetUserProfile: false,
    canIUseOpenData: wx.canIUse('open-data.type.userAvatarUrl') && wx.canIUse('open-data.type.userNickName') // 如需尝试获取用户信息可改为false
  },
  // 事件处理函数
  bindViewTap() {
    wx.navigateTo({
      url: '../logs/logs'
    })
  },
  onLoad() {
    if (wx.getUserProfile) {
      this.setData({
        canIUseGetUserProfile: true
      })
    }
  },
  getUserProfile(e) {
    // 推荐使用wx.getUserProfile获取用户信息,开发者每次通过该接口获取用户个人信息均需用户确认,开发者妥善保管用户快速填写的头像昵称,避免重复弹窗
    wx.getUserProfile({
      desc: '展示用户信息', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写
      success: (res) => {
        console.log(res)
        this.setData({
          userInfo: res.userInfo,
          hasUserInfo: true
        })
      }
    })
  },
  getUserInfo(e) {
    // 不推荐使用getUserInfo获取用户信息,预计自2021年4月13日起,getUserInfo将不再弹出弹窗,并直接返回匿名的用户个人信息
    console.log(e)
    this.setData({
      userInfo: e.detail.userInfo,
      hasUserInfo: true
    })
  }
})