美文网首页
小程序随笔1:初识小程序

小程序随笔1:初识小程序

作者: 乌龟学跑步 | 来源:发表于2021-03-01 11:05 被阅读0次

小程序出来这么久,一直没有接触过,今天来初步认识一下。

想要做一个小程序,第一步,找到微信开放文档,https://developers.weixin.qq.com/doc/。里面有非常详细的介绍,关于注册,认证等不多加介绍,可以直接去看。

在了解了一些文档后,我把开发工具“微信开发者工具”下载下来了,要了解他,自己要建一个demo,我是没有申请appid的,直接使用的测试号,如下图。


新建项目页

建好后,进入页面,说实话,挺蒙的,项目已经初始化并包含了一些简单的代码文件。同名的各种文件,下面来说一下每个文件的作用。

最关键也是必不可少的,是 app.js、app.json、app.wxss 这三个。其中,.js 后缀的是脚本文件,.json 后缀的文件是配置文件,.wxss 后缀的是样式表文件。微信小程序会读取这些文件,并生成小程序实例。

app.js
小程序的脚本代码。我们可以在这个文件中监听并处理小程序的生命周期函数、声明全局变量。调用 MINA 提供的丰富的 API,如本例的同步存储及同步读取本地数据。

// 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
      }
    })
    // 获取用户信息
    wx.getSetting({
      success: res => {
        if (res.authSetting['scope.userInfo']) {
          // 已经授权,可以直接调用 getUserInfo 获取头像昵称,不会弹框
          wx.getUserInfo({
            success: res => {
              // 可以将 res 发送给后台解码出 unionId
              this.globalData.userInfo = res.userInfo

              // 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回
              // 所以此处加入 callback 以防止这种情况
              if (this.userInfoReadyCallback) {
                this.userInfoReadyCallback(res)
              }
            }
          })
        }
      }
    })
  },
  globalData: {
    userInfo: null
  }
})

app.json
小程序的全局配置。我们可以在这个文件中配置小程序是由哪些页面组成,配置小程序的窗口 背景色,配置导航条样式,配置默认标题。注意该文件不可添加任何注释。在创建的项目中,默认有两个界面,这两个界面的源码在page目录下。微信小程序中的每一个页面的【路径 + 页面名】都需要写在 app.json 的 pages 中,且 pages 中的第一个页面是小程序的首页。

{
  "pages":[
    "pages/index/index",
    "pages/logs/logs"
  ],
  "window":{
    "backgroundTextStyle":"light",
    "navigationBarBackgroundColor": "#000",
    "navigationBarTitleText": "TestProgram",
    "navigationBarTextStyle":"white"
  },
  "style": "v2",
  "sitemapLocation": "sitemap.json"
}

app.wxss
小程序公共样式表。我们可以在页面组件的 class 属性上直接使用 app.wxss 中声明的样式规则。

/**app.wxss**/
.container {
  height: 100%;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: space-between;
  padding: 200rpx 0;
  box-sizing: border-box;
} 

看完小程序的更目录,我们还可以发现,有一个pages的文件夹,不难猜出这个文件夹就是存放小程序的每个页面的。本例中有两个页面,都放在了page目录下。每一个小程序页面是由同路径下同名的四个不同后缀文件的组成,如:index.js、index.wxml、index.wxss、index.json。.js 后缀的文件是脚本文件,.json 后缀的文件是配置文件,.wxss 后缀的是样式表文件,.wxml 后缀的文件是页面结构文件。(.js .xml是构成页面的必须文件, .wxss .json为非必须文件)

index.js
页面的脚本文件,在这个文件中我们可以监听并处理页面的生命周期函数、获取小程序实例,声明并处理数据,响应页面交互事件等。

// index.js
// 获取应用实例
const app = getApp()

Page({
  data: {
    motto: 'Hello World',
    userInfo: {},
    hasUserInfo: false,
    canIUse: wx.canIUse('button.open-type.getUserInfo')
  },
  // 事件处理函数
  bindViewTap() {
    wx.navigateTo({
      url: '../logs/logs'
    })
  },
  onLoad() {
    if (app.globalData.userInfo) {
      this.setData({
        userInfo: app.globalData.userInfo,
        hasUserInfo: true
      })
    } else if (this.data.canIUse) {
      // 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回
      // 所以此处加入 callback 以防止这种情况
      app.userInfoReadyCallback = res => {
        this.setData({
          userInfo: res.userInfo,
          hasUserInfo: true
        })
      }
    } else {
      // 在没有 open-type=getUserInfo 版本的兼容处理
      wx.getUserInfo({
        success: res => {
          app.globalData.userInfo = res.userInfo
          this.setData({
            userInfo: res.userInfo,
            hasUserInfo: true
          })
        }
      })
    }
  },
  getUserInfo(e) {
    console.log(e)
    app.globalData.userInfo = e.detail.userInfo
    this.setData({
      userInfo: e.detail.userInfo,
      hasUserInfo: true
    })
  }
})

index.wxml
页面的结构文件,代码的结结构类似于HTML。可在该文件中搭建页面结构,绑定数据和交互处理数据。

<!--index.wxml-->
<view class="container">
  <view class="userinfo">
    <button wx:if="{{!hasUserInfo && canIUse}}" open-type="getUserInfo" bindgetuserinfo="getUserInfo"> 获取头像昵称 </button>
    <block wx:else>
      <image bindtap="bindViewTap" class="userinfo-avatar" src="{{userInfo.avatarUrl}}" mode="cover"></image>
      <text class="userinfo-nickname">{{userInfo.nickName}}</text>
    </block>
  </view>
  <view class="usermotto">
    <text class="user-motto">{{motto}}</text>
  </view>
</view>

index.wxss 是页面的样式表:类似于CSS.

/**index.wxss**/
.userinfo {
  display: flex;
  flex-direction: column;
  align-items: center;
}

.userinfo-avatar {
  width: 128rpx;
  height: 128rpx;
  margin: 20rpx;
  border-radius: 50%;
}

.userinfo-nickname {
  color: #aaa;
}

.usermotto {
  margin-top: 200px;
}

相关文章

  • 小程序随笔1:初识小程序

    小程序出来这么久,一直没有接触过,今天来初步认识一下。 想要做一个小程序,第一步,找到微信开放文档,https:/...

  • 微信小程序开发教程(基础篇)3-app.js 解析

    微信小程序开发教程(基础篇)1-初识微信小程序微信小程序开发教程(基础篇)2-微信小程序结构概览 上一篇教程中写道...

  • 初识小程序

    从开始接触小程序到现在审核通过一个半月的时间,第一次接触感觉跟vue有很多相似的地方。 总结一下小程序的基本用法:...

  • 初识小程序

    什么是小程序 小程序是一种不需要下载安装即可使用的应用,它实现了应用“触手可及”的 梦想,用户扫一扫或者搜一下即可...

  • 初识小程序

    本质上来说,我们更希望在智能手机里用户可以更快捷的获取服务,但是他的体验又比网站要好很多很多,同时他的麻烦程度又比...

  • 初识小程序

    不确定原则一: 微信小程序的使用体验接近原生APP,与H5应用相比更加流畅。微信小程序的开发难度接近于H5应用开发...

  • 初识小程序

    关注了挺久的小程序,今天终于如期而至。IOS需要更新到最新版本才可体验。安卓系统可支持添加小程序到桌面。这里附上小...

  • 初识小程序

    微信小程序入门 什么是微信小程序:不需要下载直接使用的一种程序 不需要下载-安装包大小小于1M 用户用完即走,不用...

  • 初识小程序

    学习小程序的第一周,做一个简单的整理,谈谈自己对小程序的体会。 一个完整的小程序项目是一个集成于微信内部的几个网页...

  • 初识小程序

    一、前言 小程序目前已经遍布我们的生活 我们每天几乎都或多或少的会用到小程序,最常见的便是乘车二维码了 因此学习下...

网友评论

      本文标题:小程序随笔1:初识小程序

      本文链接:https://www.haomeiwen.com/subject/efnofltx.html