微信小程序入门篇(一)

小程序也已经出来有一段时间啦,对于一些想去学习又无从下手的朋友们,欢迎和代码君一起去学习一下小程序!

准备工作


  1. 下载开发工具:微信小程序开发工具

创建项目


  1. 添加项目
    ![创建项目1-1.png](http://upload-images.jianshu.io/upload_images/1750086-ea1c62b474a76c34.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
  2. 如果没有AppID可以选择无AppID,项目名称可以随便起,因为入门教程我想教大家都比较想学的商城,所以直接叫商城啦,项目目录中的shopping是自己创建的新文件夹,空文件夹系统就会自动在shopping文件夹中创建整个项目架构,记得勾选quick start项目
![创建项目1-2.png](http://upload-images.jianshu.io/upload_images/1750086-83c53a8be011813b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

项目架构分析


  1. 整体架构:自动创建的项目就会以下架构目录

    • 红框1 :菜单栏
    • 红框2:界面效果显示
    • 红框3 :代码架构目录
    • 红框4 :代码栏
    ![项目架构1-1.png](http://upload-images.jianshu.io/upload_images/1750086-6d9f52a544d249cc.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
  2. 着重对代码架构目录做介绍:app.js、app.json、app.wxss,这三个中前两个是必看的,前两个相当于目录,就好比你读一本书,都要先看一下目录,所以以后看别人项目的时候,首先先看app.js和app.json

    • app.js是小程序的脚本代码。我们可以在这个文件中监听并处理小程序的生命周期函数、声明全局变量。调用框架提供的丰富的 API,如本例的同步存储及同步读取本地数据。
    • ​ app.json 是对整个小程序的全局配置。我们可以在这个文件中配置小程序是由哪些页面组成,配置小程序的窗口背景色,配置导航条样式,配置默认标题。注意该文件不可添加任何注释。
    • app.wxss 是整个小程序的公共样式表。我们可以在页面组件的 class 属性上直接使用 app.wxss 中声明的样式规则。
  3. app.json解析:首先既然是.json所以一定是json格式,这里面包含两部分pageswindow,固定字段,pages就是整个小程序包含的页面,可以根据路径查找到对应的页面,window就是设置一些窗口样式,依次是配置小程序的窗口 背景字体样式,配置导航条背景样式,配置默认标题,及颜色

    ![项目架构3-1.png](http://upload-images.jianshu.io/upload_images/1750086-b0f2fab48bf97349.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    ### **现学现用** - **我要设置导航栏的标题为商城,字体为白色,背景为黑色要怎么做呐?** 很简单吧,找到app.json把下面的代码替换到window里面就可以啦,要解释一下navigationBarBackgroundColor和navigationBarTextStyle都是支持rgb的,也就是说设置字体颜色navigationBarTextStyle为白色填入white其实也可以填入#fff,都是一样的效果
    1
    2
    3
    4
    5
    6
    "window":{
    "backgroundTextStyle":"light",
    "navigationBarBackgroundColor": "#000",
    "navigationBarTitleText": "商城",
    "navigationBarTextStyle":"white"
    }
    • 我要增加一个界面怎么办呐? 同理只需在app.json里的pages属性加入你要的路径pages/addPage/addPage,你写好路径后系统会自动给你建好文件的

      1
      2
      3
      4
      5
      "pages":[
      "pages/index/index",
      "pages/logs/logs",
      "pages/addPage/addPage"
      ]

      下图是解决以上两个问题的效果图,app.json就暂时解析到这里,记着我们在这里面有新添加一个界面addPage,后面会详细介绍这个界面的,篇幅限制,这个先搁置一下

      ![项目架构3-2.png](http://upload-images.jianshu.io/upload_images/1750086-fa4ac946bd96d641.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
  4. app.js解析:看后缀名.js就知道是JavaScript的代码,首先看一下App里面包含的几个方法onLaunch、getUserInfo、getUserInfo

    ![项目架构4-1.png](http://upload-images.jianshu.io/upload_images/1750086-95c639265f0c14b3.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    - **onLaunch**方法是小程序启动的时候执行的方法
    1
    2
    3
    var logs = wx.getStorageSync('logs') || [] 
    logs.unshift(Date.now())
    wx.setStorageSync('logs', logs)

    看一下里面的代码,wx.以这个开头的都是系统封装好的方法,我们都可以直接调用,输入wx.,系统会自动提示出自带的方法,查询更多系统定义的方法请看微信API文档,这里篇幅限制不能全部介绍


    项目架构4-2.png

    好,回归正题,看着三句话代码,wx.getStorageSync是获取本地缓存的logs字段,logs.unshift代码是什么意思呐?unshift是js的知识,unshift() 方法可向数组的开头添加一个或更多元素,并返回新的长度。所以大概能理解这三句话代码啦,大致是取本地缓存数据logs字段,插入最新时间,然后存储再次存入到缓存中的logs字段里,说了这么多,那Storage存储的数据在哪里呐,请看下图,会更好理解,找到菜单栏里的调试->Storage下就可以看到本地缓存的logs字段及数据,你也可以自行添加数据,然后调用wx.getStorageSync(‘key值’) ,就可以获取数据啦

    ![项目架构4-3.png](http://upload-images.jianshu.io/upload_images/1750086-4a259a494ff7d5ed.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    • globalData全局变量数据,
    • getUserInfo自定义的方法用于获取用户信息,整体的代码意思就是如果用户信息为空就去调用微信的登录接口,登录成功后存储在全局变量globalData里,分析两处代码第一处var that = this,that=this,这个是js语法属性,this应该是引用本实例的一个值,它将它赋值给that的原因从下面的代码中可以判断出来js的一些特性。每一个方法是一个封闭函数,它的上一层实例即为this,所以如果一个方法A包含另一个方法B,在A中使用this指的是A的实例,在B中使用this应该是B的实例,即拥有B的A,所以在这里我们为了拿到A中的实例this,必须要赋一个值给that,让B能使用A的实例。在此demo中,上面的this指的是app这个实例,为了在下面的方法中可以使用app的实例,所以赋了that给this。还不明白that=this可以参考此文献,第二处是typeof cb == “function” && cb(this.globalData.userInfo),代码中两次调用此代码所以要剖析一下,cb是callback的缩写,翻译代码意思就是cb==function,要求cb为方法,并且回调cb方法,剩下的wx.login猜都能猜出来是微信封装好的登录方法啦
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
getUserInfo:function(cb){
var that = this
if(this.globalData.userInfo){
typeof cb == "function" && cb(this.globalData.userInfo)
}else{
//调用登录接口
wx.login({
success: function () {
wx.getUserInfo({
success: function (res) {
that.globalData.userInfo = res.userInfo
typeof cb == "function" && cb(that.globalData.userInfo)
}
})
}
})
}
},
globalData:{
userInfo:null
}
  1. app.wxss 我打算放在下一节和addPage页一起讲

总结


  1. 通过这个篇幅的介绍,我们了解了小程序的整体架构,学习了如何创建小程序,以及对小程序目录app.js、app.json详细的分析,下一篇将会详细讲解addPage的编写,敬请期待!
  2. 温故而知新,看文上面的文章,不能一带而过,要学会举一反三,下面我提几个问题,看看读者吸收的怎么样。能回答以下问题说明你读懂这篇文章啦,读不懂请查看上面的内容自行找答案
    • wx.login是什么?
    • that = this的作用?
    • 在哪里可以查到StorageSync本地缓存的数据?
    • 如何增加页面?
    • 在哪里设置导航栏的属性?