小程序

小程序是2016年9月进行内测的,2017年1月9日,第一批小程序正式上线
我最早是在2017年年中时接触小程序,后来中间大约三年的时间都没有再开发过小程序,这次开发咱们心理派小程序才发现小程序已经很丰富了,可以使用很多的插件,还有了npm构建工具,也是边写程序边学习关于小程序新的知识。

一、新建小程序

下载微信开发者工具
1、AppID : 申请注册后会生成一个appid,想快速体验可以先用测试号,回头申请后直接修改appid就行。
2、后端服务:云开发和非云开发

区别:

①云开发, 开发者自己不需要本地配置服务器和数据库、存储、云函数等基础能力,直接在微信官方提供的服务器端操作就行了
②普通的开发,是需要自己准备服务器和数据库、存储、云函数等。

云开发和传统开发的区别.png

但是这里选择使用了测试号就没有云开发的选项了。
模板选择:选择JavaScript基础模板。

可以看到项目里边生成了不同类型的文件:

  1. .json 后缀的 JSON 配置文件
  2. .wxml 后缀的 WXML 模板文件
  3. .wxss 后缀的 WXSS 样式文件
  4. .js 后缀的 JS 脚本逻辑文件

接下来我们分别看看这4种文件的作用。

1、JSON 配置

可以看到根目录有一个 app.jsonproject.config.json,此外在 pages/logs 目录下还有一个 logs.json

1.1 小程序配置 app.json

app.json 是当前小程序的全局配置,包括了小程序的所有页面路径、界面表现、网络超时时间、底部 tab 等。刚才快速创建的项目里的 app.json 配置内容如下:

{
  "pages":[
    "pages/index/index",
    "pages/logs/logs"
  ],
  "window":{
    "backgroundTextStyle":"light",
    "navigationBarBackgroundColor": "#fff",
    "navigationBarTitleText": "Weixin",
    "navigationBarTextStyle":"black"
  }
}

其他配置项细节可以参考文档 小程序的配置 app.json

1.2 工具配置 project.config.json

简单来说就是,你配置了这里,当你换个重新安装开发者工具或者换个电脑,只要载入这个项目的代码,会自动恢复到你之前的个性化配置,比如编辑器的颜色、界面等等
其他配置项细节可以参考文档 开发者工具的配置

1.3 页面配置 page.json

用来单独配置某个页面的,比如你在app.js里配置了导航栏颜色是白色,这是全局的,而你某个页面需要导航栏显示蓝色,就可以在这个json文件里配置
其他配置项细节可以参考文档 页面配置

2、WXML 模板

WXML和HTML 非常相似,但也有很多不一样的地方
①标签,HTML里常用的标签是div、span,WXML里主要用的view、text,没有div、span的存在了,当然WXML也有很多其他的标签,跟html有些大同小异。
②多了一些表达式,类似vue,比如 wx:if 和 {{ }}

表达式 表达式 表达式
vue v-if="xxx" v-for="(item,index) in list" :class
wxml wx:if="{{xxx}}" wx:for="{{list}}" class="{{xxx}}"

还有一些类似的区别写法,写的时候发现不能运行,可以首先检查一下是不是用了vue的写法。

3、WXSS 样式

具有 CSS 大部分的特性,做了一些扩充和修改
1、新增了尺寸单位rpx,小程序底层来换算,由于换算采用的浮点数运算,所以运算结果会和预期结果有一点点偏差。
2、提供了全局的样式和局部样式。和前边 app.json, page.json 的概念相同, app.wxss 是全局样式,会作用于当前小程序的所有页面,局部页面样式 page.wxss 仅对当前页面生效。
3、此外 WXSS 仅支持部分 CSS 选择器
更详细的文档可以参考 WXSS

4、js交互

整体来说跟vue差不多,说几个有点小区别的地方

// 1、设置属性
 // vue 
this.xxx = xxx;
// 小程序里
this.setData({
  xx:xx
})
// 2、获取属性
// vue
this.xxx;
// 小程序里
this.data.xxx
// 3、方法
// vue里 xie在methods里
// 小程序里 直接写在跟生命周期函数同等级的地方

4、生命周期

4.1 小程序的生命周期,在app.js里调用
onLaunch: 小程序初始化完成时触发,全局只触发一次。
onShow :小程序启动,或从后台进入前台显示时触发。
onHide :小程序从前台进入后台时触发。
onError :小程序发生脚本错误或 API 调用报错时触发。
onPageNotFound: 小程序要打开的页面不存在时触发。
onUnhandledRejection: 小程序有未处理的 Promise 拒绝时触发
onThemeChange :系统切换主题时触发。

4.2 页面的生命周期
onLoad:生命周期回调—监听页面加载
onShow: 生命周期回调—监听页面显示
onReady:生命周期回调—监听页面初次渲染完成
onHide: 生命周期回调—监听页面隐藏
onUnload:生命周期回调—监听页面卸载

4.3 组件的生命周期
created:生命周期回调—监听页面加载
attached: 生命周期回调—监听页面显示
ready:生命周期回调—监听页面初次渲染完成
moved:生命周期回调—监听页面隐藏
detached: 生命周期回调—监听页面卸载
error:每当组件方法抛出错误时执行
show: 组件所在的页面被展示时执行
hide:组件所在的页面被隐藏时执行

新建小程序页面可以在app.json里pages里直接写入 比如
 "pages/login/index"

这样就会自动在pages里创建一个名字是login的文件夹,并且文件夹里自动创建了index.wxml、index.wxss、index.json、index.js

二、wxs

wxs不是wxss,wxs(WeXin Script)是小程序的一套脚本语言,结合wxml,可以构建出页面的结构
wxs也不是JavaScript,它有自己的语法。
使用场景:
测评量表做题页,一个问题有N个选项,需求是显示
A 没有或很少
B 小部分时间
C 相当多时间
D 绝大部分或者全部时间
接口没有返回 ABCD,我们需要将数组的index转成ABCD
这种在vue中是很简单的一个转换,methods里写个方法,或者用computed实现,但是小程序里没有computed的存在(我后来查了一下,可以用npm安装 npm install --save miniprogram-computed),也不支持在wxml里写{{ formatFn(index) }}
这时候用wxs就比较方便了,直接看使用示例
新建一个filter.wxs 文件

var filterLetters = function (i) {
  var letter = {
    '0': "A",
    '1': "B",
    '2': "C",
    '3': "D",
  };
  return letter[i.toString()];
};
module.exports = {
  filterLetters: filterLetters
};

在wxml文件里写入

   <wxs src="/utils/filters.wxs" module="filter" />
   {{filter.filterLetters(index)}}

wxs的用处还有很多,我开发时只用到了这一处,更多使用可以查看 wxs

三、构建npm

构建npm,每安装一个第三方库都需要点击一下 '工具' --- '构建 npm';
3.1 拿我使用的一个UI框架示例,vant weapp,就是vant 框架的小程序版

  // 安装命令,在与 app.json 同级下安装;
cnpm i @vant/weapp -S --production

使用每一个vant组件都需要在对应的json里引入,例如

 "van-sticky": "@vant/weapp/sticky/index",

全局使用的 vant 组件放在 app.json 里.

3.2 安装less,不知道为啥不可以npm安装,最后我是在网上看别人安装的步骤实现的。

// 在 vscode 的插件里安装插件 Easy less;

// 找到 easy less 包的目录,目标文件夹是 **mrcrowl.easy-less-1.7.3**;

// **mac** 是在 ~/.vscode/extensions 下(在终端 cd ~/.vscode/extensions,然后输入 open. 回车 );

// **windows** 是在 C:\Users\用户名.vscode\extensions 下;

// 将目标文件拷贝到微信开发者工具里
// 设置>扩展设置>扩展>自定义扩展
// 点击,“打开扩展文件夹”,然后会打开一个文件夹,粘贴到这里就行了。

// 打开微信开发者工具 -- 设置 -- 编辑器设置 -- 拉到最下面,点击更多编辑器设置 -- 
// 搜索 easy less -- 点击在 setting.json 中编辑 -- 在 less.compile 中加入 "outExt": ".wxss",

// 重启微信开发者工具,在 pages 的页面里新建一个 index.less 文件,写入并保存,会自动生成一个 index.wxss 文件

参考链接1
参考链接2

四、组件

最早小程序是不支持组件的,从小基础库版本 1.6.3 开始支持。

五、开发者工具

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,390评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,821评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,632评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,170评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,033评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,098评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,511评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,204评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,479评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,572评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,341评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,893评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,171评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,486评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,676评论 2 335

推荐阅读更多精彩内容