小程序也已经出来有一段时间啦,对于一些想去学习又无从下手的朋友们,欢迎和代码君一起去学习一下小程序!
准备工作
- 下载开发工具:微信小程序开发工具
创建项目
-
添加项目
-
如果没有AppID可以选择无AppID,项目名称可以随便起,因为入门教程我想教大家都比较想学的商城,所以直接叫商城啦,项目目录中的shopping是自己创建的新文件夹,空文件夹系统就会自动在shopping文件夹中创建整个项目架构,记得勾选quick start项目
项目架构分析
- 整体架构:自动创建的项目就会以下架构目录
- 红框1 :菜单栏
- 红框2:界面效果显示
- 红框3 :代码架构目录
-
红框4 :代码栏
- 着重对代码架构目录做介绍:app.js、app.json、app.wxss,这三个中前两个是必看的,前两个相当于目录,就好比你读一本书,都要先看一下目录,所以以后看别人项目的时候,首先先看app.js和app.json
- app.js是小程序的脚本代码。我们可以在这个文件中监听并处理小程序的生命周期函数、声明全局变量。调用框架提供的丰富的 API,如本例的同步存储及同步读取本地数据。
- app.json 是对整个小程序的全局配置。我们可以在这个文件中配置小程序是由哪些页面组成,配置小程序的窗口背景色,配置导航条样式,配置默认标题。注意该文件不可添加任何注释。
- app.wxss 是整个小程序的公共样式表。我们可以在页面组件的 class 属性上直接使用 app.wxss 中声明的样式规则。
- app.json解析:首先既然是.json所以一定是json格式,这里面包含两部分pages和window,固定字段,pages就是整个小程序包含的页面,可以根据路径查找到对应的页面,window就是设置一些窗口样式,依次是配置小程序的窗口 背景字体样式,配置导航条背景样式,配置默认标题,及颜色
现学现用
- 我要设置导航栏的标题为商城,字体为白色,背景为黑色要怎么做呐? 很简单吧,找到app.json把下面的代码替换到window里面就可以啦,要解释一下navigationBarBackgroundColor和navigationBarTextStyle都是支持rgb的,也就是说设置字体颜色navigationBarTextStyle为白色填入white其实也可以填入#fff,都是一样的效果
"window":{
"backgroundTextStyle":"light",
"navigationBarBackgroundColor": "#000",
"navigationBarTitleText": "商城",
"navigationBarTextStyle":"white"
}
- 我要增加一个界面怎么办呐? 同理只需在app.json里的pages属性加入你要的路径pages/addPage/addPage,你写好路径后系统会自动给你建好文件的
"pages":[
"pages/index/index",
"pages/logs/logs",
"pages/addPage/addPage"
]
下图是解决以上两个问题的效果图,app.json就暂时解析到这里,记着我们在这里面有新添加一个界面addPage,后面会详细介绍这个界面的,篇幅限制,这个先搁置一下
- app.js解析:看后缀名.js就知道是JavaScript的代码,首先看一下App里面包含的几个方法onLaunch、getUserInfo、getUserInfo
- onLaunch方法是小程序启动的时候执行的方法
var logs = wx.getStorageSync('logs') || []
logs.unshift(Date.now())
wx.setStorageSync('logs', logs)
看一下里面的代码,wx.以这个开头的都是系统封装好的方法,我们都可以直接调用,输入wx.,系统会自动提示出自带的方法,查询更多系统定义的方法请看微信API文档,这里篇幅限制不能全部介绍
好,回归正题,看着三句话代码,wx.getStorageSync是获取本地缓存的logs字段,logs.unshift代码是什么意思呐?unshift是js的知识,unshift() 方法可向数组的开头添加一个或更多元素,并返回新的长度。所以大概能理解这三句话代码啦,大致是取本地缓存数据logs字段,插入最新时间,然后存储再次存入到缓存中的logs字段里,说了这么多,那Storage存储的数据在哪里呐,请看下图,会更好理解,找到菜单栏里的调试->Storage下就可以看到本地缓存的logs字段及数据,你也可以自行添加数据,然后调用wx.getStorageSync('key值') ,就可以获取数据啦
- 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猜都能猜出来是微信封装好的登录方法啦
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
}
- app.wxss 我打算放在下一节和addPage页一起讲
总结
- 通过这个篇幅的介绍,我们了解了小程序的整体架构,学习了如何创建小程序,以及对小程序目录app.js、app.json详细的分析,下一篇将会详细讲解addPage的编写,敬请期待!
- 温故而知新,看文上面的文章,不能一带而过,要学会举一反三,下面我提几个问题,看看读者吸收的怎么样。能回答以下问题说明你读懂这篇文章啦,读不懂请查看上面的内容自行找答案
- wx.login是什么?
- that = this的作用?
- 在哪里可以查到StorageSync本地缓存的数据?
- 如何增加页面?
- 在哪里设置导航栏的属性?